Abstract

XX

Introduction

XX

In this paper, we first introduce a child-friendly version of Weisman et al.’s (2017) experimental paradigm, validate it among US adults, and then use this paradigm to conduct an initial exploration of this conceptual structure and mental capacity attributions among US children, focusing on 7- to 9-year-old children (Study 1). Next, we replicate our findings with 7- to 9-year-old children using a briefer experimental paradigm, and use this briefer paradigm to assess the earlier development of this conceptual structure, focusing on 4- to 6-year-old children (Study 2). We then develop an even simpler version of the paradigm, using more basic vocabulary and a streamlined experimental protocol, with the aim of validating and refining our understanding of conceptual structure among 4- to 6-year-old children, as well as exploring how younger children’s attributions of different aspects of mental life might vary with age (Study 3). Finally, to supplement the group-level analyses picture of development provided by the exploratory factor analyses for Studies 1-3, we re-analyze these data using a novel, participant-level approach that allows us to observe how these conceptual structures might evolve and unfold continuously over development (“Continuous development at the participant level: A re-analysis of Studies 1-3”).

Overview of Methods and Analyses

Studies 1-3 used very similar experimental paradigms and were designed with the same analyses in mind. Here we provide an overview of the methods and planned analyses for all of these studies; any details that varied across studies are supplied in the “Methods” section of each of the studies.

General methods

Following Weisman et al. (2017), these studies were designed with the goal of focusing participants’ attention on the similarities, differences, and relationships among various mental capacities.

To this end, each participant was either randomly or pseudo-randomly assigned to assess 1-2 target characters (e.g., a beetle, a robot, a goat, etc.) on a wide range of sensory, perceptual, emotional, social, cognitive, and other mental capacities, ranging in number from 18-40 across studies and presented in either a random or a pseudo-random (counterbalanced) order. Participants were presented with a vivid, full-color photograph of their assigned target in a naturalistic context (e.g., a beetle on a leaf; a robot in an office; a goat in a grassy field), which they had access to throughout the study.

On each trial, participants were asked a question of the form Do you think a [target] can [do X]? (e.g., “Do you think a beetle can feel happy?”; Studies 1-2) or Can [targets] [do X]? (Study 3) (e.g., “Can beetles feel happy?”). Participants responded on a three-point scale (no, coded as 0; kinda, coded as 0.5; or yes, coded as 1). Although a three-point scale is not optimal for factor analyses, pilot testing suggested that it was critical in allowing children to move fast enough through the study to answer all questions, and maintaining this within-subjects design was our top priority for the planned analyses.

See the Methods section for each study for details of the particular target characters and mental capacities included in each study, as well as the materials and physical setup.

Primary analysis: Exploratory factor analysis (EFA)

Our primary goal in conducting these studies was to uncover a set of latent constructs that might plausibly have given rise to the observed correlations among mental capacity attributions in each group of participants. As such, our primary planned analysis for all studies was an exploratory factor analysis (EFA). Following Weisman et al. (2017), we interpreted each of the constructs (“factors”) as corresponding to a fundamental component of mental life, according to this group of participants; by extension, we consider the full set of factors for each sample to represent to the overall “conceptual structure” underlying mental capacity attributions for this group of participants.

For all EFAs, we used ordinary least squares to find the minimum residual solution, using the “psych” package for R (Revelle, 2018). Here we focus on results using Pearson correlations using pairwise complete observations. (See Online Supplementary Materials [OSM] for solutions using polychoric correlations, which are better suited to handle responses on a three-point scale but, to our eyes, tended to over-fit our data by suggesting that we should retain many factors that each accounted for only a small amount of the shared variance.)

In order to determine how many factors to retain, we examined the results of three factor retention protocols: (1) Parallel Analysis, which compares the observed correlation structure to the correlation structure arising from random datasets of the same size; (2) Minimizing the Bayesian Information Criterion (BIC), which is one method of optimizing both goodness of fit and parsimony; and (3) A set of factor retention criteria that have been used in Weisman et al.’s (2017) previous work, in which they began with the maximal number of factors according to an analysis of degrees of freedom, and retained factors that met all three of the following criteria: (a) had eigenvalues greater than 1.00, (b) individually accounted for greater than 5% of the shared variance before rotation, and (c) were the “dominant” factor (the factor with the strongest absolute factor loading) for at least 1 mental capacity after rotation. For each study, our interpretation of how best to characterize the dataset (i.e., how many factors we observe) was determined by the degree of consensus among these three protocols and the interpretability of the retained factors under each protocol.

Here we focus our interpretations on varimax-rotated solutions, which constrain all factors to be orthogonal. (See OSM for solutions using oblique [“oblimin”] rotations, which allow for correlated factors.)

Secondary analysis: Regression analyses of factor scores

Having inferred a conceptual structure for a given group of participants via EFA, we then sought to examine attributions of mental capacities to the particular target characters included in each study within this conceptual structure: To what extent did participants attribute each of the fundamental components of mental life revealed by EFA to a given target character, and how did this attributions vary with age (either within an age group or between age groups)? To explore this question, we examined “factor scores”—summaries of each participant’s attributions of each of factors revealed by EFA. We used the correlation-preserving “ten Berge” method (as implemented in the “psych” package; Revelle, 2018), imputing missing values using the mean (by target character, capacity, and age group). This yielded one factor score for each of the factors revealed by EFA for each participant.

We analyzed these factor scores via mixed effects Bayesian regression analyses using the “brms” package for R (Bürkner, 2017). In all of these analyses, we included the maximal random effect structures given the design for the relevant study. Further details varied by study, depending on the number of target characters included in that study, the number of factors revealed by EFA for the relevant group(s) of participants, and the goals of the analysis (e.g., comparing two age groups vs. examining continuous effects of age within one or more groups of participants).

Study 1

The goal of Study 1 was to develop a child-friendly version of Weisman et al.’s (2017) study paradigm and conduct an initial exploration of this conceptual structure among children.

Pilot testing suggested that children as young as 7 years of age found the paradigm easy and enjoyable, and work on the development of lay biology and psychology has suggested that these concepts may continue to develop well into middle childhood (e.g., Carey, 1985; Hatano & Inagaki, 1997; Piaget, 1929; cf. Gelman & Opfer, 2002). Thus, we targeted 7- to 9-year-old children for our first child sample. We also recruited a group of adults to validate our child- friendly paradigm, i.e., to evaluate whether it replicated Weisman et al.’s (2017) original work with adults. In Weisman et al.’s (2017) original studies, participants evaluated a target character on 40 mental capacities using a seven-point Likert-type scale. Pilot testing suggested two necessary modifications for children: rewording some of the mental capacity items, and using a simpler, three-point response scale (no, kinda, or yes; see “Overview of Methods and Analyses, above”).

Method

Participants

400 people participated in this study.

Adults (n=200) participated via Amazon Mechanical Turk (MTurk) in July 2016. Adult participants had gained approval for at least 95% of their previous work on MTurk; had MTurk accounts based in the US; and indicated that they were at least 18 years old. Adults were paid $0.30 for approximately 2-3 minutes of their time (median duration: 2.48 min).

According to self report, the adult sample ranged in age from 18-65 years (median: 31y) and was roughly split between women (47%) and men (52%; 1% of participants identified as some other gender or opted not to disclose). Adults predominantly identified as White (81%; 8% identified as more than one race/ethnicity, and \(\leq\) 4% as any other race/ethnicity). The vast majority of adults reported English being their only native language (91%; an additional 7% indicated that English was one of multiple native languages for them.)

Children (n=200) participated at one of several San Francisco Bay Area museums or at their younger sibling’s preschool between July-December 2016. The study took most children under 10 minutes to complete (median duration: 5.18 min). An additional 12 children participated but were excluded for being outside the target age range (n=7), being of unknown age (n=4), or being shown a target character other than a beetle or a robot (n=1). Children received a small thank-you gift (e.g., a sticker) for their participation.

Children ranged in age from 7.01-9.99 years (median: 8.31y). According to parental report, the child sample included slightly more girls (56%) than boys (42%; 2% of children’s gender was non-binary or unknown). Parents predominantly identified their children as White (32%), multiracial (12%), East Asian (12%), or South Asian (10%; \(\leq\) 8% of children were identified as any other race/ethnicity, and 22% of children’s race/ethnicity was unknown). Roughly half of parents (46%) reported that their child was bilingual (though, anecdotally, parents’ interpretations of “bilingual” ranged from taking classes at school to speaking a langauge at home).

Materials and procedure

Following Weisman et al. (2017, Studies 1-3), participants were randomly assigned to assess the mental capacities of one of two “edge cases” in social reasoning: a beetle (n=98 adults, n=104 children) or a robot (n=102 adults, n=96 children). Because beetles are animals and robots are artifacts, this pair provides insight into the role of biological life in attributions of mental life—an issue of particular interest from a developmental perspective, given the long history of work on the development of the animate-inanimate distinction and its relation to folk psychology. Most critically for our bottom-up approach to uncovering conceptual structure, the “mental lives” of these entities are controversial: People differ in their assessments of the mental capacities of beetles and robots. This allowed us to address the following question: When participants disagree about the mental capacities of some entity, which capacities “go together”?

Instructions to participants focused on the idea that we wanted to know what participants thought “[beetles/robots] can do and can not do.” Participants rated the target character on 40 mental capacities, presented in a random order for each participant. On each trial, participants responded no, kinda, or yes to the question “Do you think a [beetle/robot] can…?” The three response options were visible throughout the experiment.

The 40 mental capacities were designed to be as close as possible to those in Weisman et al.’s (2017) original studies, while being comprehensible to children in early elementary school. This set of items included physiological sensations related to biological needs (e.g., get hungry); emotional experiences (e.g., feel happy); perceptual abilities (e.g., hear sounds); cognitive abilities (e.g., remember things); capacities related to autonomy or agency (e.g., decide what to do); social abilities (e.g., feel guilty); and several additional items (e.g., be aware of itself). Each of these a priori categories included at least five items of varying valence, complexity, and phrasing. (See Figure 1 for the full list of mental capacities included in Study 1.)

We also prepared a short definition for each item, so as to be consistent in our responses to participants (particularly children) if they asked for clarification. Children were encouraged at the beginning of the study to ask questions if they did not know what a word meant, in which case they given these definitions; adults were told that they could access these definitions by hovering over the text on the computer screen. Pilot testing suggested that seven items required clarification for most children, so these items were always accompanied by their definitions from the beginning of the trial (for both adults and children), as follows: have a personality, like when someone is shy and somebody else is silly; have beliefs, like when you think something is true; feel pleasure, like when something feels really good; have desires, like when you really want something; have self- control, like when you stop yourself from doing something you shouldn’t do; have goals, like when you’re trying hard to do something or make something happen; and feel sick, like when you feel like you might throw up.

Adults completed the study by clicking through a website at their own pace, with one trial presented on each page and no ability to go backwards. Children completed the study on an experimenter’s laptop computer. The experimenter read the instructions and the first several trials out loud, requesting verbal responses from the child and selected his or her response for her; after several trials, the experimenter gave the child the option to continue independently (reading the questions and selecting their answers themselves) if they desired. Roughly half of participants completed the remainder of the task independently.

Data processing

We dropped trials with response times that were faster than a preset criterion of 250ms (n=3 child trials, n=97 adult trials) and retained participants regardless of skipped trials (n=55 child trials, n=1 adult trial). Overall, only 1% of adult trials and 1% of child trials were missing data; in these cases, we imputed missing values using the median by target character, capacity, and age group.

Results

Conceptual structure: Adults

Two of our three methods for determining how many factors to retain (minimizing BIC and Weisman et al.’s factor retention criteria) suggested retaining three factors. (Parallel analysis suggested retaining four factors. Three of these factors were very similar to the three factors reported below, and the fourth factor was dominant for a handful of sensory and perceptual capacities, including hear sounds, sense temperatures, see things, and sense whether something is close by or far away; see SOM.)

After rotation, the first factor corresponded primarily to capacities for self- and other-relevant emotions—a suite of capacities that we (following Weisman et al.) will refer to as HEART. It was the dominant factor for such items as feel proud, feel joy, feel sad, and feel happy, and accounted for 37% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to physiological sensations related to biological needs—a suite of capacities that we (following Weisman et al.) will refer to as BODY. It was the dominant factor for such items as get hungry, feel pain, feel scared, and feel tired, and accounted for 37% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to perceptual-cognitive abilities to detect and use information about the environment—a suite of capacities that we (following Weisman et al.) will refer to as MIND. It was the dominant factor for such items as figure out how to do things, make choices, recognize somebody else, and sense whether something is close by or far away, and accounted for 25% of the shared variance in the rotated three-factor solution.

See Figure 1 for all factor loadings. (Note that for the sake of consistency across studies and comparison with Weisman et al.’s work, we have plotted these factors in the same order for all studies: BODY, HEART, and MIND.)

In sum, as Weisman et al.‘s original studies, a three-factor structure emerged from adults’ mental capacity attributions, characterized by a distinction between body, heart, and mind. This suggests that our child-friendly paradigm was valid: Using reworded items and a three-point response scale elicited the same intuitive ontology of mental life, among adults, that has been revealed by more complex, “adult-friendly” experimental paradigms.

Conceptual structure: Children (7-9y)

Our three methods for determining how many factors to retain all suggested retaining three factors.

After rotation, the first factor corresponded primarily to social-emotional abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ HEART factor (cosine similarity with HEART: 0.97; with BODY: 0.41; with MIND: 0.43). It was the dominant factor for such items as feel proud, feel happy, feel joy, and get hurt feelings, and accounted for 50% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to physiological sensations. An analysis of factor congruence confirmed that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.91; with HEART: 0.26; with MIND: 0.03). It was the dominant factor for such items as get hungry, feel pain, smell things, and feel scared, and accounted for 30% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to perceptual-cognitive abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.94; with HEART: 0.35; with BODY: 0.01). It was the dominant factor for such items as be aware of itself, be aware of things, figure out how to do things, and sense whether something is close by or far away, and accounted for 20% of the shared variance in the rotated three-factor solution. (See Figure 1 for all factor loadings.)

In sum, like adults, children’s mental capacity attributions were dominated by a three-way distinction between physiological, social-emotional, and perceptual-cognitive abilities—i.e., body, heart, and mind.

Attributions of mental life

The factor analyses of correlations among mental capacity attributions just described shed light on one aspect of children’s concepts of mental life: its ontological structure. The design of our study also allows us to look at a second aspect of conceptual development in this domain: children’s application of this concept, i.e., which mental capacities they tend to attribute or not to attribute to the different target characters. How might children’s attributions of capacities related to BODY, HEART, and MIND vary across middle childhood (7-9y), and how do they compare to the mental capacity attributions of adults?

Differences across age groups

To compare children’s mental capacity attributions to those of adults, we projected children’s responses into the factor space defined by adults (standardized in terms of adults’ responses), and examined factor scores by age group (using the correlation-preserving method articulated by ten Berge, Krijnen, Wansbeek, & Shapiro, 1999, as implemented in the “psych” package for R, Revelle, 2018). This yielded three scores for each participant, corresponding, in principle, to holistic judgments of the social-emotional, physiological, and perceptual-cognitive abilities of the target character the participant evaluated. (Note that each of these three scores takes into account factor loadings for all 40 mental capacities, as shown in Figure 1.)

This allowed us to examine the effects of age group (adult, child), character (beetle, robot), and factor (BODY, HEART, MIND) on these scores via mixed effects Bayesian regression. See Table 1 for the results of a maximal model and Figure 4 for scores by age group, age (for children), factor, and character.

Table 1: Fixed effects from a mixed-effects Bayesian regression model predicting factor scores in Study 1 by character (beetle, robot), factor (BODY, HEART, MIND), and age group (adults, children). The model used the formula 'factor score ~ factor * age group * character + (1 | subject)' and was implemented in the 'brms' package for R (Bürkner, 2017). Factor and character were effect-coded; age group was dummy-coded with adults as the baseline. Asterisks mark parameters whose 95% credible interval does not include 0.
Parameter b Error 95% CI
Adults
(Intercept) 0.00 0.04 [-0.07, 0.08]
character (robot vs. grand mean) -0.25 0.04 [-0.33, -0.17] *
HEART (vs. grand mean) -0.01 0.06 [-0.11, 0.10]
MIND (vs. grand mean) -0.01 0.06 [-0.12, 0.10]
character × HEART 0.26 0.06 [ 0.15, 0.37] *
character × MIND 0.42 0.06 [ 0.31, 0.53] *
7-9y vs. adults
age group (children vs. adults) 0.60 0.06 [ 0.49, 0.70] *
character × age group 0.09 0.06 [-0.02, 0.20]
HEART × age group 1.64 0.08 [ 1.48, 1.78] *
MIND × age group -1.10 0.08 [-1.26, -0.94] *
character × HEART × age group -0.03 0.08 [-0.19, 0.12]
character × MIND × age group -0.07 0.08 [-0.22, 0.08]

Collapsing across factors, factor scores suggest that adults generally attributed fewer mental capacities to the robot than the beetle (b = -0.25, 95% credible interval: [-0.33, -0.17]). However, this appears to be entirely due to the huge discrepancy between characters in the BODY domain; the difference between characters was reduced to nothing in the HEART domain (b = 0.26, 95% credible interval: [0.15, 0.37]), and reversed in the perceptual-cognitive domain (b = 0.42, 95% credible interval: [0.31, 0.53]).

Meanwhile, children children tended to attribute more mental capacities, collapsing across characters, than did adults (b = 0.60, 95% credible interval: [0.49, 0.70]) - but this was driven primarily by the social-emotional domain (b = 1.64, 95% credible interval: [1.48, 1.78]), and was reversed in the perceptual-cognitive domain (b = -1.10, 95% credible interval: [-1.26, -0.94]).

A visual inspection of Figure 2 clarifies these findings. Attributions in the BODY and MIND domains were rather similar for children and adults: Both children and adults marked a clear difference between the robot and the beetle in the physiological sensations of the BODY (top row), in line with the animate–inanimate distinction; and both age groups credited the robot with slightly greater perceptual-cognitive skills (MIND) than the beetle (bottom row). In contrast, in the HEART domain (middle row) both the beetle and the robot received rather low scores among adults, but very high scores among children.

The raw data further supporst these observations; see Figure 3 for raw counts of no, kinda, and yes responses for all items, grouped by factor, character, and age group. For example, consider hunger (the first capacity under BODY): Across age groups, nearly every participant said that a beetle could get hungry, while few participants (with the exception of some children) said that a robot could. Likewise, for mathematical computations (the last capacity under MIND), virtually no participants said that a beetle was capable of doing math, while the vast majority of both adults and children said that a robot was. But for social-emotional abilities, like feeling proud, feeling joy, and feeling sad (the first three capacities under HEART), far more children than adults endorsed these capacities for beetles and robots. (See SOM for an analysis, parallel to the regression analyses here, of the proportion of the top-loading mental capacities for each factor that were endorsed by participants of different ages.)

Age differences within the child sample

Of course, our sample of “children” included participants as young as 7 years and up to nearly 10 years of age. How did attributions vary across this age range?

To explore age-related differences continuously within the child sample, we conducted an additional regression analysis on children’s factor scores alone, including interactions with exact age in years (centered at the mean: 8.35y) rather than age group. In line with the age group analysis described in the previous section, this confirmed that, relative to the grand mean, attributions of HEART decreased with age (b = -0.41, 95% credible interval: [-0.56, -0.27]) and attributions of MIND increased with age (b = 0.35, 95% credible interval: [0.21, 0.50]). (See Table 2 for the full results of this model.)

Table 2: Fixed effects from a mixed-effects Bayesian regression model of children's responses, predicting factor scores in Study 1 by character (beetle, robot), factor (BODY, HEART, MIND), and exact age. The model used the formula 'factor score ~ factor * age * character + (1 | subject)' and was implemented in the 'brms' package for R (Bürkner, 2017). Factor and character were effect-coded, and age was mean-centered. Asterisks mark parameters whose 95% credible interval does not include 0.
Parameter b Error 95% CI
Collapsing across age
(Intercept) 0.60 0.04 [ 0.51, 0.69] *
character (robot vs. grand mean) -0.16 0.04 [-0.25, -0.08] *
HEART (vs. grand mean) 1.63 0.06 [ 1.50, 1.75] *
MIND (vs. grand mean) -1.10 0.06 [-1.22, -0.98] *
character × HEART 0.21 0.06 [ 0.09, 0.33] *
character × MIND 0.35 0.06 [ 0.23, 0.47] *
Age effects
age (mean-centered) -0.08 0.05 [-0.18, 0.03]
character × age -0.09 0.05 [-0.20, 0.01]
HEART × age -0.41 0.08 [-0.56, -0.27] *
MIND × age 0.35 0.07 [ 0.21, 0.50] *
character × HEART × age -0.08 0.07 [-0.23, 0.06]
character × MIND × age 0.06 0.08 [-0.09, 0.21]

Indeed, visual inspection of Figure 4 suggests that, across all three domains (BODY, HEART, and MIND), children’s mental capacity attributions to beetles and robots appeared to become more adult-like with age—but while the oldest children were indistinguishable from adults in the BODY and MIND domains, even the oldest children appear to have attributed more social-emotional abilities to these entities than most adults did.

Taken together, these analyses converge to suggest only minor differences between children and adults in their attributions of BODY and MIND to beetles and robots—but a major difference in HEART: Relative to adults, children tended to credit both beetles and robots with much greater social-emotional abilities.

Discussion

Study 1 shed light on two distinct aspects of the development of children’s concpetual representations of mental life: continuity in the underlying conceptual structure and variabilty in the application of these concepts.

On the one hand, exploratory factor analyses suggested that by midddle childhood (7-9y), the conceptual structure underlying US children’s attributions of mental life is very similar to that of US adults, anchored by suites of mental capacities related to BODY (physiological sensations), HEART (social-emotional abilities), and MIND (perceptual-cognitive abilities). We note that, in principle, a number of additional or alternative latent factors could have emerged from the factor analysis of children’s responses. For example, children might have distinguished primarily between internal experience and external action (Gray et al., 2007), or they might have demonstrated finer-grained groupings of mental capacities based on phrasing, rote knowledge, etc. Instead, the latent conceptual structure underlying children’s responses appears to be very similar to that of adults, both in this study and in Weisman et al.’s (2017) previous work. In other words, any dramatic developmental changes to this conceptual structure likely occur prior to the age of 7 years.

On the other hand, analyses of children’s attributions within this shared conceptual structure suggested that their application of this concept—in particular, their attributions of the social-emotional abilities of the HEART—may be undergoing continuing refinement through middle childhood. The specificity of this age difference—which emerged dramatically in one domain (HEART), but not others (BODY, MIND)—suggests that this is unlikely to be due either to a general tendency toward “mentalizing” these characters (or a simple “yes” bias). But its extension to both beetles and robots raises many questions. With regard to robots, children growing up in the 21st century might be converging on a new understanding of technological “beings” as inanimate objects with some degree of social-emotional life (see Kahn, Gary, & Shen, 2013)—but this kind of historical conceptual change would not predict the high rates of social-emotional attributions to beetles that we observed. Our findings are perhaps more consistent with a general openness to untraditional social partners that extends into middle childhood (but not adulthood)—or with a difference in construals of what it means to feel proud, happy, guilty, etc. To what kinds of entities would children of this age deny social-emotional abilities, and how do they draw this line? How would younger children’s attributions of HEART (as well as BODY and MIND) compare?

Study 2

The goals of Study 2 were threefold.

First, we aimed to extend our findings with 7- to 9-year-old children in Study 1, by expanding the list of the target characters to include not only the two “edge cases” from Study 1 (a beetle and a robot), but a also a wider range of animate beings (a bird, a goat, and an elephant) and inanimate objects (a computer, a teddy bear, and a doll). In contrast to Study 1, where we tracked which mental capacities “hang together” when participants reasoned about controversial “edge cases” in social reasoning, Study 2 allowed us to track which mental capacities “hang together” when target characters are perceived to vary in their mental capacity profiles. In Weisman et al.’s original studies, this approach yielded a highly similar conceptual structure to the “edge case” approach (Weisman et al., 2017; Study 4). We reasoned that if this three-part conceptual structure is stable and robust by the age of 7-9 years, it should manifest among 7- to 9-year-old children under the same range of conditions that it does among adults.

Our second goal was to assess the earlier development of conceptual structure in a group of younger children. We targeted 4- to 6-year-old children for our younger age group because this has been identified as a period of dramatic development in several relevant domains. Many studies have documented shifts in children’s abilities to take others’ perspectives, represent false beliefs, and integrate representations of intentions and outcomes in evaluating moral responsibility (for reveiws, see Flavell, 1999; Wellman, 2015). The preschool years have also been the focus of a rich tradition of work on lay biology and the animate-inanimate distinction extending back nearly a century (e.g., Carey, 1985; R. Gelman, Spelke, & Meck, 1983; Medin, Waxman, Woodring, & Washinawatok, 2010; Piaget, 1929; for a review, see S. Gelman & Opfer, 2002). All of these accounts make the case that becoming a sophisticated reasoner—and particularly a sophisticated social reasoner—requires substantial refinement of one’s representations of others’ experiences, beliefs, desires, and needs. Might these refinements include changes to the structure of children’s concepts of mental life?

Our third goal was to examine age-related changes in which mental capacities tend to be attributed to which target characters. In summarizing the results of Study 1, we discussed mental capacity attributions as the “application” of concepts of mental life, in contrast to the conceptual “structure” revealed by exploratory factor analysis. By expanding the range of target characters included in the study, Study 2 provides an opportunity to explore changes in how children apply their developing concepts of mental life to a variety of animate beings and inanimate objects.

Method

Participants

241 people participated in this study, including a group of adults, a group of “older” children (7-9y), and a group of “younger” children (4-6y).

Adults (n=116) participated via MTurk in September 2018. Adult participants had gained approval for at least 95% of their previous work on MTurk; had MTurk accounts based in the US; and indicated that they were at least 18 years old. Adults were paid $0.45 for approximately 2-4 minutes of their time (median duration: 3.02 min). An additional 22 adults participated but were excluded for failing to respond sensibly to an open-ended question about what they had been asked to do in the study (e.g., copying and pasting text from the question, writing “good study,” or describing a different study, e.g., “I wrote an essay about nature”; n=11) or for failing to pass one or more attention checks (e.g., “Please select no”; n=11). According to self report, the final adult sample ranged in age from 20-69 years (median: 38y) and included slightly more men (53%) than women (47%). Adults predominantly identified as White (84%; 2% identified as more than one race/ethnicity, and \(\leq\) 4% as any other race/ethnicity).

We recruited two groups of children: “older” children (7-9y) and “younger” children (4-6y). Our planned sample size was 120 per age group, but we also retained a handful of extra participants who completed the study on the final day of data collection for each group.

The group that we will refer to as “older children” (n=125) ranged in age from 7.08-9.98 years (median: 8.56y), and participated at one of several San Francisco Bay Area museums or at their younger sibling’s preschool between July-December 2016. The study took most older children under 4 minutes to complete (median duration: 2.70 min). According to parental report, the sample of older children included slightly more boys (54%) than girls (45%); 1% of children’s gender was non-binary or unknown). Parents predominantly identified their children as White (30%), South Asian (14%), multiracial (11%), or East Asian (10%); \(\leq\) 7% of children were identified as any other race/ethnicity, and 22% of children’s parents declined to provide information on their race/ethnicity).

“Younger children” (n=124) ranged in age from 4.00-6.98 years (median: 5.03y), and participated either at a university-affiliated preschool or at a Bay Area museum between January-June 2017. The study took most younger children under 6 minutes to complete (median duration: 3.58 min). According to parental report and school records, the sample of younger children included roughly the same numbers of girls (48%) and boys (52%). Children were predominantly identified as multiracial (46%) or White (28%; \(\leq\) 6% of children were identified as any other race/ethnicity, and 5% of children’s parents declined to provide information on their race/ethnicity).

An additional 7 children participated but were excluded for being outside the target age ranges. At museums (but not at the preschool), children received a small thank-you gift (e.g., a sticker) for their participation.

Materials and procedure

Pilot testing suggested that working with younger children would require making a briefer experimental paradigm with fewer than the 40 questions included in Study 1; limiting the list to 20 questions seemed to allow children as young as 4 years of age to complete the study easily and without getting bored or frustrated, while still including enough items to enable us to proceed with our exploratory “dimensionality reduction” approach to uncovering conceptual structure.

Participants were assigned to evaluate one of the following target characters: an elephant, a goat, a mouse, a bird, a beetle, a teddy bear, a doll, a robot, or a computer (n per characater: 6-18 adults, 10-17 older children, and 12-16 younger children; see Figure 6 for exact counts).

Participants were assigned to target characters randomly, with two exceptions: (1) The doll and teddy bear conditions were run last for older children (but included in the initial randomization scheme for adults and younger children); and (2) Toward the end of data collection with children, children were assigned to conditions that had the fewest participants. (This was not possible with adults, which is why the number of adults per condition was more variable than the number of children per condition.) As in Study 1, a vivid, high-resolution photo of the target character in a naturalistic context was visible for the duration of the study.

Instructions and procedure were identical to Study 1, with two exceptions: (1) Participants rated the target character on 20 (rather than 40) mental capacities; and (2) For younger children, the experimenter read all questions out loud and children responded verbally.

The 20 mental capacities were a subset of the 40 items used in Study 1, chosen to include physiological sensations, emotional experiences, perceptual abilities, cognitive skills, capacities related to autonomy or agency, and social abilities; and to include some of the strongest-loading items for each of the three factors uncovered among adults in Study 1 (see Figure 1). As in Study 1, each mental capacity was associated with a short, preset definition. Both older and younger children were encouraged at the beginning of the study to ask questions if they did not know what a word meant, in which case they were given these definitions. (Adults did not have access to these definitions.)

After completing the 20 questions about mental capacities, for a subset of participants we also asked two additional questions: “Is a [target] made out of metal?” and “Can a [target] be turned on and off?” These questions were always asked last, and were not intended to be included in any of our primary analyses. See SOM for an analysis of responses to these questions.

Data processing

We planned to drop trials with response times that were faster than a preset criterion of 250ms, but there were none among children, and we failed to record response times among adults. As in Study 1, we retained participants regardless of skipped trials. Overall, none of adults or older children’s trials, and only 1.22% of younger children’s trials (n=30) were missing data.

For our exploratory factor analyses, we looked at each group of partipants (adults, older children, and younger children) separately, because EFA is a group-level analysis of the consensual conceptual structure and is not designed to model continuous participant-level variables like exact age. Our goal with these analyses was to examine discrete “snapshots” of this conceptual structure at two points in this continuous developmental trajectory.

Results

Conceptual structure: Adults

As in Study 1, two or our three methods for determining how many factors to retain (in this case, parallel analysis and Weisman et al.’s factor retention criteria) suggested retaining three factors. (Minimizing BIC suggested retaining four factors, but the fourth factor was the dominant factor for only 1 mental capacity: feel happy; see SOM.)

As expected, the conceptual structure revealed by this analysis among adults was characterized by a three-way distinction between BODY (first factor, 38% of the shared variance in the rotated three-factor solution), HEART (first factor, 33% of shared variance), and MIND (first factor, 29% of shared variance). See Figure 5, Panel D.

This suggests that our modified child-friendly paradigm was valid: Using a shorter list of items and a wider range of target characters elicited the same intuitive ontology of mental life, among US adults, that was revealed in Study 1 and in Weisman et al.’s (2017) previous work.

Conceptual structure: Older children (7-9y)

Our three methods for determining how many factors to retain all suggested retaining three factors. As in Study 1, the conceptual structure revealed by this analysis among 7- to 9-year-old children was very similar to that of adults, again characterized by a three-way distinction between BODY, HEART, and MIND.

After rotation, the first factor corresponded primarily to physiological sensations. An analysis of factor congruence confirmed that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.97; with HEART: 0.65; with MIND: 0.63). It was the dominant factor for such items as get hungry, feel scared, feel pain, and smell things, and accounted for 39% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to social-emotional abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ HEART factor (cosine similarity with HEART: 0.98; with BODY: 0.66; with MIND: 0.48). It was the dominant factor for such items as feel guilty, feel proud, feel embarrassed, and feel sad, and accounted for 35% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to perceptual-cognitive abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.96; with HEART: 0.47; with BODY: 0.62). It was the dominant factor for such items as figure out how to do things, make choices, remember things, and sense temperatures, and accounted for 26% of the shared variance in the rotated three-factor solution. (See Figure 5, Panel C, for all factor loadings.)

We consider this to be a close conceptual replication of our Study 1 findings, suggesting that by the age of 7-9 years, this three-part conceptual structure is stable and robust to a range of experimental conditions.

Conceptual structure: Younger children (4-6y)

Our three methods for determining how many factors to retain each suggested retaining different numbers of factors: Weisman et al.’s factor retention criteria suggested retaining 3 factors, parallel analysis suggested retaining 2 factors, and minimizing BIC suggested a null, 1-factor solution. Here we present both the two- and three-factor solutions. (See SOM for factor loadings on the one “factor” in the null, one-factor solution, which yielded particularly strong loadings for social-emotional experiences and physiological sensations, such as get hungry, feel tired, feel happy, and feel proud.)

Three-factor solution

In the rotated three-factor solution suggested by Weisman et al.‘s retention criteria, the first factor corresponded primarily to physiological sensations, as well as some positive emotions. An analysis of factor congruence indicated that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.92), but was also quite similar to adults’ HEART factor (cosine similarity with HEART: 0.81; with MIND: 0.7). It was the dominant factor for such items as get angry, get hungry, get hurt feelings, and feel tired, and accounted for 40% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to perceptual-cognitive abilities, as well as one complex negative emotion (feel guilty). An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.94; with HEART: 0.67; with BODY: 0.71). It was the dominant factor for such items as sense temperatures, remember things, feel guilty, and figure out how to do things, and accounted for 30% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to social-emotional abilities, with particularly strong loadings for positive emotions. An analysis of factor congruence indicated that this factor was most similar to adults’ HEART factor (cosine similarity with HEART: 0.87), but also quite similar to adults’ BODY factor (cosine similarity with BODY: 0.81; with MIND: 0.62). It was the dominant factor for such items as feel happy, feel love, feel proud, and feel scared, and accounted for 30% of the shared variance in the rotated three-factor solution. (See Figure 5, Panel B, for all factor loadings.)

We would describe this conceptual structure as reminiscent of the BODY-HEART-MIND structure found among older children and adults, but not as fully “adult-like.” In particular, in this structure, the physiological sensations associated with the BODY among older children and adults are not as clearly differentiated from the emotional experiences associated with the HEART. Indeed, it it not clear that BODY vs. HEART is the most salient distinction among the first and third factors in this solution: A cleaner description of these factors might be negatively-valenced experiences vs. positively-valenced experiences.

Two-factor solution

In the rotated two-factor solution suggested by parallel analysis, the first factor encompassed both physiological sensations and emotions. An analysis of factor congruence indicated that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.93), but was also quite similar to adults’ HEART factor (cosine similarity with HEART: 0.88; with MIND: 0.7). It was the dominant factor for such items as get hungry, feel sick, feel happy, and get angry, and accounted for 65% of the shared variance in the rotated two-factor solution.

The second factor corresponded primarily to perceptual-cognitive abilities, as well as one complex negative emotion (feel guilty). An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.94; with HEART: 0.73; with BODY: 0.73). It was the dominant factor for such items as sense temperatures, remember things, feel guilty, and sense whether something is close by or far away, and accounted for 35% of the shared variance in the rotated three-factor solution. (See Figure 5, Panel A, for all factor loadings.)

In relation to the BODY-_HEART-MIND structure found among older children and adults, we would describe this two-factor structure as being anchored by a contrast between the cognitive capacities of the MIND vs. a set of warmer, more visercal experiences that constitute a more integrated representation of BODY-HEART.

Attributions of mental life

In Study 1, we saw that even children as old as 7-9y—whose conceptual structure seemed to be quite similar to that of adults’—nonetheless differed from adults in their application of this concept, attributing far more of the social-emotional abilities related to the HEART to both beetles and robots. How do children’s mental capacity attributions compare to adults for the larger set of target characters included in Study 2—and what does this aspect of conceptual developmental look like earlier in development (4-6y)?

Differences across age groups

Following Study 1, we projected all of children’s responses into the factor space defined by adults (standardized in terms of adults’ responses), and examined factor scores by age group (again, using the method articulated by ten Berge et al., 1999). As in Study 1, this yielded three scores for each participant, corresponding, in principle, to holistic judgments of the social-emotional, physiological, and perceptual-cognitive abilities of the target character the participant evaluated. (Note that each of these three scores takes into account adult factor loadings for all 20 mental capacities, as shown in Figure 5, Panel D.)

This allowed us to examine the effects of age group (younger children, older children, adults), factor (BODY, HEART, MIND), and target character on these scores via mixed effects Bayesian regression. As in Study 1, factor was effect-coded, and age group was dummy-coded with adults as the baseline, to assess whether children in each age group were “adult-like” in their assessments. To examine differences in mental capacity attributions to different target characters, we coded each character as either “animate” (elephant, goat, mouse, bird, beetle) or “inanimate” (computer, robot, doll, teddy bear), and included animacy status (effect-coded) as a fixed effect in our regression model. We included intercepts and slopes for individual characters as random effets in our model, along with intercepts for individual participants.1

The results of this model can be found in Table 3.

Table 3: Fixed effects from a mixed-effects Bayesian regression model predicting factor scores in Study 2 by animacy status (animates, inanimates), factor (BODY, HEART, MIND), and age group (4-6y, 7-9y, adults). The model used the formula 'factor score ~ factor * age group * animacy + (1 | subject) + (1 + factor + age group | character)' and was implemented in the 'brms' package for R (Bürkner, 2017). Animacy status and factor were effect-coded; age-group was dummy-coded with adults as the baseline. Asterisks mark parameters whose 95% credible interval does not include 0.
Parameter b Error 95% CI
Adults
(Intercept) -0.08 0.07 [-0.23, 0.05]
HEART (vs. grand mean) 0.03 0.10 [-0.17, 0.21]
MIND (vs. grand mean) 0.00 0.17 [-0.35, 0.34]
characters: animates vs. inanimates 0.49 0.07 [ 0.36, 0.63] *
characters (animates/inanimates) × HEART -0.26 0.10 [-0.46, -0.07] *
characters (animates/inanimates) × MIND -0.09 0.18 [-0.44, 0.26]
7-9y vs. adults
age group (7-9y vs. adults) 0.16 0.09 [-0.02, 0.34]
HEART × age group (7-9y/adults) 0.51 0.09 [ 0.34, 0.69] *
MIND × age group (7-9y/adults) -0.44 0.09 [-0.61, -0.26] *
characters (animates/inanimates) × age group (7-9y/adults) -0.19 0.09 [-0.37, -0.01] *
characters (animates/inanimates) × HEART × age group (7-9y/adults) 0.08 0.09 [-0.09, 0.26]
characters (animates/inanimates) × MIND × age group (7-9y/adults) -0.28 0.09 [-0.46, -0.11] *
4-6y vs. adults
age group (4-6y vs. adults) 0.08 0.08 [-0.08, 0.22]
HEART × age group (4-6y/adults) 0.78 0.09 [ 0.61, 0.96] *
MIND × age group (4-6y/adults) -0.81 0.09 [-0.99, -0.62] *
characters (animates/inanimates) × age group (4-6y/adults) -0.26 0.07 [-0.41, -0.12] *
characters (animates/inanimates) × HEART × age group (4-6y/adults) 0.29 0.09 [ 0.12, 0.47] *
characters (animates/inanimates) × MIND × age group (4-6y/adults) -0.18 0.09 [-0.36, 0.00] *

By definition, adults’ factor scores did not differ across factors (HEART vs. grand mean: b = 0.03, 95% credible interval: [-0.17, 0.21]; MIND vs. grand mean: b = 0.00, 95% credible interval: [-0.35, 0.34]). As we would expect, adults attributed more mental capacities (collapsing across factors) to animates than inanimates (b = 0.49, 95% credible interval: [0.36, 0.63])—a difference that was diminished in the HEART domain (b = -0.26, 95% credible interval: [-0.46, -0.07]), but not substantially diminished in the MIND domain (b = -0.09, 95% credible interval: [-0.44, 0.26]).

As a group, 7- to 9-year-old children’s mental capacity attributions did not differ from adults, collapsing collapsing across factors and characters (b = 0.16, 95% credible interval: [-0.02, 0.34])—but this masks several important differences between older children and adults. As in Study 1, older children’s scores were characterized by a relative over-attribution of abilities in the HEART domain (b = 0.51, 95% credible interval: [0.34, 0.69]), and a relative under-attribution of abilities in the MIND domain (b = -0.44, 95% credible interval: [-0.61, -0.26]). Collapsing across factors, older children made less of a distinction between animate an inanimate target characters, relative to adults (b = -0.19, 95% credible interval: [-0.37, -0.01]). This relative under-differentiation of animate and inanimate characters was particularly pronounced in the MIND domain (b = -0.28, 95% credible interval: [-0.46, -0.11]).

How did younger children compare to adults? As a group, 4- to 6-year-old children’s mental capacity attributions did not differ from adults, collapsing collapsing across factors and characters (b = 0.08, 95% credible interval: [-0.08, 0.22])—but again, this masks a variety of developmental differences that generally parallel the differences between older children and adults just described. Much like older children, younger children’s scores were characterized by a relative over-attribution of abilities in the HEART domain (b = 0.78, 95% credible interval: [0.61, 0.96]) and a relative under-attribution of abilities in the MIND domain (b = -0.81, 95% credible interval: [-0.99, -0.62]), and they differentiated less between animate an inanimate target characters than did adults (b = -0.26, 95% credible interval: [-0.41, -0.12]). This relative under-differentiation of animate and inanimate characters was particularly pronounced in the MIND domain (b = -0.18, 95% credible interval: [-0.36, 0.00]), and less pronounced in the HEART domain (b = 0.29, 95% credible interval: [0.12, 0.47]).

A visual inspection of Figure 6 further clarifies these findings.

In the BODY domain, a distinction between animate and inanimate target characters was clearly present in all age groups, though slightly attenuated among 4- to 6-year-old children (see Figure 6, Panel A, top row). A closer look at factor scores for individual characters (Panel B, top row) suggests that younger children diverged from adults primarily in their attributions to the “edge cases” that were the focus of Study 1: the robot (to which they over-attributed the physiological sensations related to the BODY), and the beetle (to which they under-attributed such BODY capacities). Older children’s BODY attributions were generally indistinguishable from adults’ for almost all target characters. (The only possible exception is the bird—but, in our view, it appears that this was driven by adults slightly under-attributing BODY capacities to this character.)

In the HEART domain, the distinction between animate and inanimate target characters was subtler across all age groups, and the degree of distinction did not vary dramatically with age (see Figure 6, Panel A, middle row). Instead, children generally over-attributed HEART to both animates and inanimates; these over-attributions declined between 4-6y and 7-9y of age, but did not reach adult-like levels even among older children. This is consistent with Study 1, in which 7- to 9-year-old children over-attributed HEART to both the beetle and the robot, relative to adults. In this study, older children again attributed more HEART capacities to the beetle and the robot, but also to the mouse and the goat (see Panel B, middle row). Relative to other animates, adults attributed particularly few HEART capacities to the mouse and the goat—perhaps because of their respecive statuses as vermin and food animals in this cultural context.

Finally, in the MIND domain, neither group of children made a robust distinction between animates and inamates—but adults clearly did (see Figure 6, Panel A, bottom row). Instead, children generally under-attributed MIND to both animates and inanimates. These under-attributions became less dramatic between 4-6y and 7-9y of age, and by 7-9y children’s MIND attributions to inanimates were adult-like. But even at 7-9y, children did not attributed as many MIND capacities to animates as did adults; between 7-9y and adulthood, MIND attributions increased for all of the animate characters, and particularly dramatically for the bird, the mouse, and the elephant (see Figure 6, Panel B, bottom row).

The raw data further supporst these observations; see Figure 7 for raw counts of no, kinda, and yes responses for all items, grouped by factor, animacy status (Panels A-C) or character (Panels D-F), and age group. For example, consider pain (the first capacity under BODY): Across age groups, most participants said that an elephant could feel pain, with the proportion of “yes” responses increasing across age groups; meanwhile, few participants said that a computer could feel pain, with the proportion of “yes” responses decreasing across age groups. More dramatic changes are evident in the HEART and MIND factors, with attributions of HEART generally decreasing across age groups (especially to inanimate target characters - e.g., the computer, the robot), and attributions of MIND generally increasing across age groups (especially to animate target characters - e.g., the mouse, the goat, the elephant). (See SOM for an analysis, parallel to the regression analyses here, of the proportion of the top-loading mental capacities for each factor that were endorsed by participants of different ages.)

Age differences within the child samples

As in Study 1, we were interested not only in differences across age groups, but also across the—even wider—age range within our child samples. In Study 2, this included children as young as 4 years up to nearly 10 years of age. This allowed us to look at age-related differences in mental capacity attributions across a wide period from early to middle childhood.

To explore age-related differences continuously within the child samples, we conducted an additional regression analysis on children’s factor scores alone, including interactions with exact age in years (centered at the mean: 6.73y) rather than age group. In line with the age group analysis described in the previous section, this confirmed that, relative to the grand mean, attributions of HEART decreased with age (b = -0.41, 95% credible interval: [-0.56, -0.27]) and attributions of MIND increased with age (b = 0.35, 95% credible interval: [0.21, 0.50]). (See Table 2 for the full results of this model.)

This analysis suggested that, relative to the grand mean, attributions of HEART decreased across the age range (b = -0.09, 95% credible interval: [-0.14, -0.04]), while attributions of MIND increased across the age range (b = 0.13, 95% credible interval: [0.07, 0.18]). These findings are all in line with the age group analysis described in the previous section, suggesting that the observed group differences correspond to gradual developmental differences as children’s responses become increasingly adult-like in many ways.

We observed two counter-examples to the idea that children become increasingly adult-like in their mental capacity attributions over this age range, both having to do with the degree to which children of different ages distinguished between animate and inanimate targets. If children were becoming increasingly adult-like in their animate-inanimate distinctions, we would expect the overall distinction between animates and inanimates collapsing across factors to increase with age, driven primarily by increases in the BODY and especially MIND domains. Instead, collapsing across factors, the general distinction between animate and inanimate target characters did not differ with age (b = 0.01, 95% credible interval: [-0.02, 0.05]); decreased in the HEART domain, relative to the grand mean (b = -0.06, 95% credible interval: [-0.11, -0.01]); and did not change substantially in the MIND domain (b = -0.04, 95% credible interval: [-0.09, 0.01]), as we might expect if older children were approaching “adult-like” responses in this aspect of their mental capacity attributions. We speculate on several possible explanations of these unexpected findings in the Study 2 Discussion section, below.

See Table 4 for the full results of this model, and Figure 8 for a visualization of changes in children’s factor scores across age.

Table 4: Fixed effects from a mixed-effects Bayesian regression model of children's responses, predicting factor scores in Study 2 by animacy status (animates, inanimates), factor (BODY, HEART, MIND), and exact age. The model used the formula 'factor score ~ factor * age * animacy + (1 | subject)' and was implemented in the 'brms' package for R (Bürkner, 2017). Factor and animacy were effect-coded, and age was mean-centered. Asterisks mark parameters whose 95% credible interval does not include 0.
Parameter b Error 95% CI
Collapsing across age
(Intercept) 0.04 0.05 [-0.07, 0.15]
HEART (vs. grand mean) 0.68 0.09 [ 0.49, 0.86] *
MIND (vs. grand mean) -0.64 0.15 [-0.94, -0.35] *
characters: animates vs. inanimates 0.27 0.05 [ 0.16, 0.38] *
characters (animates/inanimates) × HEART -0.07 0.09 [-0.25, 0.11]
characters (animates/inanimates) × MIND -0.31 0.14 [-0.58, -0.02] *
Age effects
age (centered at the mean) 0.03 0.02 [ 0.00, 0.07]
HEART × age -0.09 0.03 [-0.14, -0.04] *
MIND × age 0.13 0.03 [ 0.07, 0.18] *
characters (animates/inanimates) × age 0.01 0.02 [-0.02, 0.05]
characters (animates/inanimates) × HEART × age -0.06 0.03 [-0.11, -0.01] *
characters (animates/inanimates) × MIND × age -0.04 0.03 [-0.09, 0.01]

Discussion

BOOKMARK

We had three goals in Study 2: (1) To test whether the adult-like conceptual structure revealed among 7- to 9-year-old children in Study 1 would hold under the range of conditions that elicit this structure among US adults in Weisman et al.’s (2017) previous work; (2) To explore conceptual structure at an earlier point in development; and (3) To explore age-related differences in the application of concepts of mental life to a wide range of animate beings and inanimate objects.

Regarding our first goal, Study 2 suggests that the three-part conceptual structure—anchored by BODY, HEART, and MIND—is reliable and robust among 7- to 9-year-old US children. As in Weisman et al.’s (2017) original work with adults, the capacities that “hang together” in older children’s reasoning when target characaters are perceived to vary in mental capacity profiles appear to be highly similiar to those that “hang together” when participants disagree about the mental lives of controversial “edge cases” in social reasoning (Study 1).

Regarding our second goal, XX. [XX In coarser terms, XX BODY-HEART vs. MIND. This two-factor structure is also reminiscent of Gray et al.’s (2007) “experience-agency” framework; XX. But there are hints of a nascent three-factor structure, closer to BODY-HEART_MIND - not fully worked out, especially the distinction between BODY and HEART. Instead of BODY vs. HEART, negative vs. positive. The salience on negative vs. positive experiences among younger children is consistent with recent work on the development of emotion concepts, which suggests that emotion representations are dominanted by a single dimension of valence in early to middle childhood, before unfolding into a two-dimensional space characterized by valence and arousal over the course of later childhood and adolesence (Nook et al., 2017).]

Regarding our third goal, XX. [XX fulfill the promised speculations: why does animate/inanimate distinction decrease with age in the HEART domain, and why doesn’t it increase with age in the MIND domain?]

Study 3

The primary goal of Study 3 was to (conceptually) replicate and extend our findings with 4- to 6-year-old children in Study 2. In light of the concerns about vocabulary, attention, and use of the response scale among younger children in Study 2, we designed an even more child-friendly version well suited for young preschoolers, streamlining the experimental protocol, providing more scaffolding for the response scale, and including only vocabulary items that were pre-tested to be familiar to young preschool children (see “Method”).

A second goal of Study 3 was to assess younger children’s attributions of mental life to edge cases. Recall that, in Study 1, older children attributed more social-emotional abilities (“heart”) to both beetles and robots than did adults, despite sharing adults’ three-part conceptual structure; this “edge case” approach of Study 1 allowed us to estimate older children’s aggregate attributions to these entities with precision and to chart changes in these attributions over age continuously within the range of 7-9 years, because large numbers of children assessed each of the two target characters (rather than participants being distributed across a wider range of target characters). In Study 3, we returned to this approach, limiting the target characters to a beetle and a robot, so as to follow up on this secondary finding with a younger group of children.

Finally, Study 3 was designed in anticipation of developing participant-level analyses to supplement the group-level EFAs discussed so far (see “Continuous development at the participant level: A re-analysis of Studies 1-3,” below). With this general goal in mind, we asked each child to assess the mental capacities of both a beetle and a robot, so as to maximize the number of observations per participant for these anticipated participant-level analyses.

Method

Participants

XX people participated in this study.

Adults (n=XX) participated via Amazon Mechanical Turk (MTurk) in September 2018. Adult participants had gained approval for at least 95% of their previous work on MTurk; had MTurk accounts based in the US; and indicated that they were at least 18 years old. Adults were paid $0.75 for approximately XX minutes of their time (median duration: XX min). An additional XX adults participated but were excluded for failing to pass one or more attention checks (e.g., “Please select no”; n=XX) or for failing to respond sensibly to an open-ended question about what they had been asked to do in the study (see Study 3 for examples; n=XX).

Among the final sample of XX adults, XX% identified as women and XX% as men. Adults predominantly identified as White (XX%; XX% as Black, XX% as Asian; XX% as XX), and reported being between XX and XX years of age (median age: XX years). XX OTHER DEMOGRAPHICS: Native language, education, religion as a child, religion now, job. XX children participated in this study, which was conducted between January 2018 and XX 2018. Our planned sample size was 100 children, but we also retained a handful of extra participants who completed the study on the final days of data collection. Children ranged in age from 4.00-XXy (median: XXy), and participated at their preschool; exact duration was not recorded, but the full study session generally took less than 10 minutes. According to school records, XX children (XX%) were girls and XX (XX%) were boys; for XX children (XX) gender was either non-binary or unknown. Parents predominantly identified their children as White (XX%) or Asian (XX%; XX% as Black, XX% as Asian; XX% as XX). XX OTHER DEMOGRAPHICS.

An additional XX children participated but were excluded for being outside the target age range.

Materials and procedure

Materials and procedure were adapted to be more appropriate for young preschoolers, with two primary goals in mind: Streamlining the experimental protocol to improve children’s comprehension and attention to the task, and limiting mental capacities to words that are highly familiar to young preschool children.

In order to streamline the experimental protocol, we moved the task off of the computer (for children but not adults), instead using printed photographs of the target characters (measuring approximately 5 x 8 inches, printed in color and laminated) and recording children’s responses by hand (rather than using the computer). At the time of testing, the experimenter and child sat side by side, with the photograph placed directly in front of the child for the duration of the task.

We also streamlined the introduction to the task. The experimenter began by placing the photograph of the first target character in front of the child and asking, “Can you tell me what this is?” If a child provided an answer other than “beetle” or “robot,” the experimenter said, “I’m going to call it a [beetle/robot].” Then the experimenter said, “We’re going to play a game about [beetles/robots],” reminded children, “if you ever want to stop playing, you can just let me know and we’ll go back to the classroom” (per preschool protocol), and then launched into the first question (e.g., “Can beetles get sad?”).

We scaffolded children’s use of the three-point response scale by providing a physical representation of the scale, consisting of three large boxes, separated by blank space, containing the words NO, KINDA, and YES written in large font with all capital letters (to aid children with at least some reading skills in recognizing these words); color-coded according to the intensity of response (NO = very light blue, KINDA = medium blue, YES = dark blue); and ordered from left (NO) to right (YES). Each box measured approximately 2 x 4 inches; the boxes were laminated with slightly less than 1 inch of empty space between them (through which the table was visible). In addition to providing these visual and spatial cues to the fact that there were three response options—no, yes, and something conceptually and literally “in between” these extremes—we also added a line to the experimenter’s script describing (and then reiterating) these response options on the first three trials (“You can say no [pointing to NO], kinda [pointing to KINDA], or yes [pointing to YES]”). The experimenter repeated these options on the first three trials for all children, and on any other trials where a child took more than a few seconds to answer or provided a response other than saying “yes,” “kinda,” or “no” or clearly pointing to one of these options on the response scale.

For each target character, children answered 18 questions about its mental capacities. These questions were designed to include six clear examples of bodily, social-emotional, and perceptual-cognitive abilities, according to Studies 1-2 and Weisman et al.’s (2017) original studies with US adults. Bodily abilities included feel hungry, get thirsty, feel sick, feel tired, get scared, and smell things. Social-emotional abilities included love someone, hate someone, feel happy, get sad, feel sorry, get lonely. Perceptual-cognitive abilities included see, hear, think, remember things, know stuff, figure things out. These items were chosen to as short as possible and highly familiar to young preschool children; they were selected from a larger pilot study in which we asked 3- to 5-year-old children to complete stories that began with each of these mental capacities as a premise (e.g., “Let’s imagine a person who loves someone. What happens next?”; “Now let’s pretend that someone remembers something. What happens next?”) and judged the appropriateness of their story completion. We further designed the set of items so that each category included a variety of phrasings (e.g., feel hungry vs. get thirsty; remember things vs. know stuff) and valences when appropriate (e.g., feel happy vs. get sad); when possible, we aimed to have phrasings vary orthogonally with categories, such that “get” and “feel” appeared roughly equally often among the bodily and social-emotional items, and “things” appeared equally often among the bodily and perceptual-cognitive items. As in Studies 1-2, each mental capacity was associated with a short, preset definition, which was read to children if they expressed uncertainty about what a word meant or did not respond after prompting use of the response scale.

Children first assessed all 18 mental capacities for one of the target characters (e.g., the beetle), then completed an easy jigsaw puzzle featuring clothing and accessories appropriate for a rainy day (which took about 30-60 second to complete), and finally assessed all 18 mental capacities for the other target character (e.g., the robot).

This modified procedure—particularly moving the experiment off of the computer for children—required changes to the experimental design. Rather than randomly assigning children to assess the beetle first or the robot first, the order of target characters was counterbalanced in advance. Likewise, rather than asking about the 18 mental capacities in a random order, questions about the first target character were asked in one of 8 pre-made random orders, and questions about the second target character were asked in the reverse order. The order of the target characters (beetle-robot or robot-beetle) and the order of the mental capacity questions (1-8) were fully crossed across participants.

Adults participated in an online version of this same task, without a break between target characters. As in Studies 1 and 2, adults clicked through a website at their own pace, with one trial presented on each page and no ability to go backwards.

Data processing

We did not record response times or use this as a criterion for inclusion. As in Studies 1-2, we retained participants regardless of skipped trials (n=XX trials; XX% of all trials).

Results

XX

Discussion

XX

General Discussion

Summary

The current studies suggest that children’s conceptual representations of mental life undergo substantial development between the ages of 4-9 years—in two distinct senses.

First, analyses of the correlational structure of children’s mental capacity attributions (EFAs) suggested changes in conceptual structure: Between early childhood (4-6 years; Studies 2-3) and middle childhood (7-9 years; Studies 1-2), children’s sense of which mental capacities “go together” seemed to unfold into a higher-dimensional space, characterized by stronger differentiation of the social-emotional abilities that we’ve called “heart” from the physiological sensations of the body and the perceptual-cognitive abilities of the mind. Meanwhile, analyses of factor scores—summaries of which mental capacities children tended to attribute to which target characters—revealed a second kind of age-related difference: what we might call changes in the application of the concept. These differences were clearest in Studies 1 and 3, which focused on two “edge cases” in social reasoning (beetles and robots): Between the ages of 4-6 years (Study 3), XX FILL IN, while between the ages of 7-9 years (Study 1), attributions of body to beetles and robots were relatively stable and adult-like, attributions of heart to these “edge cases” started out higher than adults and decreased to nearly adult-like levels by the age of 9 years, and attributions of mind started out lower than adults and increased to nearly adult-like levels by the age of 9 years.

XX GD


  1. We notes that the complexities of the design of Study 2 could lend themselves to more complex models than what we have presented here, and we encourage readers to examine a model including multiple comparisons between sets of characters (e.g., mammals vs. non-mammals; technologies vs. toys) presented in the SOM. All of the effects described below also hold true in this more complex model.

LS0tCnRpdGxlOiAnQ2hpbGRyZW4nJ3MgZGV2ZWxvcGluZyByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmU6IENoYW5nZXMgaW4gY29uY2VwdHVhbAogIHN0cnVjdHVyZSBiZXR3ZWVuIDQtOSB5ZWFycyBvZiBhZ2UnCmF1dGhvcjogIkthcmEgV2Vpc21hbiwgQ2Fyb2wgUy4gRHdlY2ssICYgRWxsZW4gTS4gTWFya21hbiIKc3VidGl0bGU6IERyYWZ0IHVwZGF0ZWQgMjAxOC0wOS0yMwpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwotLS0KCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjY3LCAKICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBGLCBlY2hvID0gRikKYGBgCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocHN5Y2gpCmxpYnJhcnkobGFuZ2NvZykgIyBzb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9sYW5nY29nL2xhbmdjb2ctcGFja2FnZQojIGxpYnJhcnkobG1lNCkKbGlicmFyeShicm1zKQpsaWJyYXJ5KHN0cmluZ2kpCmxpYnJhcnkoY293cGxvdCkKbGlicmFyeShrYWJsZUV4dHJhKQoKdGhlbWVfc2V0KHRoZW1lX2J3KCkpCmBgYAoKYGBge3J9CiMgc3VwcG9ydGluZyBmdW5jdGlvbnMKc291cmNlKCIuL3NjcmlwdHMvbWF4X2ZhY3RvcnNfZWZhLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy9yZXRlbl9mdW4uUiIpCnNvdXJjZSgiLi9zY3JpcHRzL3Bsb3RfZnVuLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy9lZmFfZnVuLlIiKQoKIyBkYXRhIHNjcmlwdHMKc291cmNlKCIuL3NjcmlwdHMvZGF0YV9zMV9hZC5SIikKc291cmNlKCIuL3NjcmlwdHMvZGF0YV9zMV83OS5SIikKc291cmNlKCIuL3NjcmlwdHMvZGF0YV9zMl9hZC5SIikKc291cmNlKCIuL3NjcmlwdHMvZGF0YV9zMl83OS5SIikKc291cmNlKCIuL3NjcmlwdHMvZGF0YV9zMl80Ni5SIikKCiMgZnVuY3Rpb24gZm9yIHF1aWNrbHkgZ2V0dGluZyBjb3VudHMgYW5kIHByb3BvcnRpb25zIGZvciBjYXRlZ29yaWNhbCBkZW1vIHZhcmlhYmxlcwpkZW1vX2Z1biA8LSBmdW5jdGlvbihkZiwgdmFyLCBuX3JvdW5kID0gTkEpewogIG5ld19kZiA8LSBkZiAlPiUKICAgIGRpc3RpbmN0Xygic3ViaWQiLCB2YXIpICU+JQogICAgbXV0YXRlX2F0KC52YXJzID0gdmFyLAogICAgICAgICAgICAgIC5mdW5zID0gLiAlPiUgYXMuY2hhcmFjdGVyKCkgJT4lIHJlcGxhY2VfbmEoLiwgIk1JU1NJTkciKSkgJT4lCiAgICBjb3VudF8odmFyKSAlPiUKICAgIG11dGF0ZShwcm9wID0gbi9zdW0obikpICU+JQogICAgYXJyYW5nZShkZXNjKG4pKQogIGlmKCFpcy5uYShuX3JvdW5kKSl7CiAgICBuZXdfZGYgPC0gbmV3X2RmICU+JSBtdXRhdGUocHJvcCA9IHJvdW5kKHByb3AsIG5fcm91bmQpKQogIH0KICByZXR1cm4obmV3X2RmKQp9CgojIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHdyaXRlLXVwIG9mIGJybXMgbW9kZWwgcmVzdWx0cwp3cml0ZV9iXzk1Q0lfZnVuIDwtIGZ1bmN0aW9uKG1vZGVsLCBwYXJhbSwgcm91bmRfbiA9IDIpewogIGZpeGVmIDwtIGZpeGVmKG1vZGVsKSAlPiUgcm91bmQocm91bmRfbikgJT4lIGZvcm1hdChuc21hbGwgPSByb3VuZF9uKQogIGIgPC0gZml4ZWZbcGFyYW0sICJFc3RpbWF0ZSJdCiAgbG93ZXIgPC0gZml4ZWZbcGFyYW0sICJRMi41Il0KICB1cHBlciA8LSBmaXhlZltwYXJhbSwgIlE5Ny41Il0KICB0ZXh0IDwtIHBhc3RlMCgiX2JfID0gIiwgYiwgCiAgICAgICAgICAgICAgICAgIiwgOTUlIGNyZWRpYmxlIGludGVydmFsOiBbIiwgbG93ZXIsICIsICIsIHVwcGVyLCAiXSIpCiAgdGV4dCA8LSBnc3ViKCJcXFsgIiwgIlxcWyIsIHRleHQpCiAgcmV0dXJuKHRleHQpCn0KCmJpbm9taWFsX3Ntb290aCA8LSBmdW5jdGlvbiguLi4pIHsKICBnZW9tX3Ntb290aChtZXRob2QgPSAiZ2xtIiwgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9ICJiaW5vbWlhbCIpLCAuLi4pCn0KYGBgCgpgYGB7cn0KIyB3aGF0IGNvcnJlbGF0aW9uIHRvIHVzZQpjaG9zZW5fY29yIDwtICJjb3IiICMgcmVwb3J0ZWQKIyBjaG9zZW5fY29yIDwtICJwb2x5IiAjIGFsdGVybmF0aXZlIG9wdGlvbgoKIyB3aGF0IHJvdGF0aW9uIHRvIHVzZQpjaG9zZW5fcm90IDwtICJ2YXJpbWF4IiAjIHJlcG9ydGVkCiMgY2hvc2VuX3JvdCA8LSAib2JsaW1pbiIgIyBhbHRlcm5hdGl2ZSBvcHRpb24KCiMgd2hhdCBmYWN0b3JpbmcgbWV0aG9kIHRvIHVzZQpjaG9zZW5fZm0gPC0gIm1pbnJlcyIgIyByZXBvcnRlZCAoc2VlIGFsdGVybmF0aXZlIG9wdGlvbnMgaW4gP2ZhKQoKIyB3aGF0IHNjb3JpbmcgbWV0aG9kIHRvIHVzZQpjaG9zZW5fc2NvcmVzIDwtICJ0ZW5CZXJnZSIgIyByZXBvcnRlZAojIGNob3Nlbl9zY29yZXMgPC0gInJlZ3Jlc3Npb24iICMgYWx0ZXJuYXRpdmUgb3B0aW9uCmBgYAoKIyBBYnN0cmFjdAoKWFgKCiMgSW50cm9kdWN0aW9uCgpYWAoKSW4gdGhpcyBwYXBlciwgd2UgZmlyc3QgaW50cm9kdWNlIGEgY2hpbGQtZnJpZW5kbHkgdmVyc2lvbiBvZiBXZWlzbWFuIGV0IGFsLidzICgyMDE3KSBleHBlcmltZW50YWwgcGFyYWRpZ20sIHZhbGlkYXRlIGl0IGFtb25nIFVTIGFkdWx0cywgYW5kIHRoZW4gdXNlIHRoaXMgcGFyYWRpZ20gdG8gY29uZHVjdCBhbiBpbml0aWFsIGV4cGxvcmF0aW9uIG9mIHRoaXMgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgYW5kIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgYW1vbmcgVVMgY2hpbGRyZW4sIGZvY3VzaW5nIG9uIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gKFN0dWR5IDEpLiBOZXh0LCB3ZSByZXBsaWNhdGUgb3VyIGZpbmRpbmdzIHdpdGggNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiB1c2luZyBhIGJyaWVmZXIgZXhwZXJpbWVudGFsIHBhcmFkaWdtLCBhbmQgdXNlIHRoaXMgYnJpZWZlciBwYXJhZGlnbSB0byBhc3Nlc3MgdGhlIGVhcmxpZXIgZGV2ZWxvcG1lbnQgb2YgdGhpcyBjb25jZXB0dWFsIHN0cnVjdHVyZSwgZm9jdXNpbmcgb24gNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiAoU3R1ZHkgMikuIFdlIHRoZW4gZGV2ZWxvcCBhbiBldmVuIHNpbXBsZXIgdmVyc2lvbiBvZiB0aGUgcGFyYWRpZ20sIHVzaW5nIG1vcmUgYmFzaWMgdm9jYWJ1bGFyeSBhbmQgYSBzdHJlYW1saW5lZCBleHBlcmltZW50YWwgcHJvdG9jb2wsIHdpdGggdGhlIGFpbSBvZiB2YWxpZGF0aW5nIGFuZCByZWZpbmluZyBvdXIgdW5kZXJzdGFuZGluZyBvZiBjb25jZXB0dWFsIHN0cnVjdHVyZSBhbW9uZyA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuLCBhcyB3ZWxsIGFzIGV4cGxvcmluZyBob3cgeW91bmdlciBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBkaWZmZXJlbnQgYXNwZWN0cyBvZiBtZW50YWwgbGlmZSBtaWdodCB2YXJ5IHdpdGggYWdlIChTdHVkeSAzKS4gRmluYWxseSwgdG8gc3VwcGxlbWVudCB0aGUgZ3JvdXAtbGV2ZWwgYW5hbHlzZXMgcGljdHVyZSBvZiBkZXZlbG9wbWVudCBwcm92aWRlZCBieSB0aGUgZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2VzIGZvciBTdHVkaWVzIDEtMywgd2UgcmUtYW5hbHl6ZSB0aGVzZSBkYXRhIHVzaW5nIGEgbm92ZWwsIHBhcnRpY2lwYW50LWxldmVsIGFwcHJvYWNoIHRoYXQgYWxsb3dzIHVzIHRvIG9ic2VydmUgaG93IHRoZXNlIGNvbmNlcHR1YWwgc3RydWN0dXJlcyBtaWdodCBldm9sdmUgYW5kIHVuZm9sZCBjb250aW51b3VzbHkgb3ZlciBkZXZlbG9wbWVudCAoIkNvbnRpbnVvdXMgZGV2ZWxvcG1lbnQgYXQgdGhlIHBhcnRpY2lwYW50IGxldmVsOiBBIHJlLWFuYWx5c2lzIG9mIFN0dWRpZXMgMS0zIikuCgojIE92ZXJ2aWV3IG9mIE1ldGhvZHMgYW5kIEFuYWx5c2VzCgpTdHVkaWVzIDEtMyB1c2VkIHZlcnkgc2ltaWxhciBleHBlcmltZW50YWwgcGFyYWRpZ21zIGFuZCB3ZXJlIGRlc2lnbmVkIHdpdGggdGhlIHNhbWUgYW5hbHlzZXMgaW4gbWluZC4gSGVyZSB3ZSBwcm92aWRlIGFuIG92ZXJ2aWV3IG9mIHRoZSBtZXRob2RzIGFuZCBwbGFubmVkIGFuYWx5c2VzIGZvciBhbGwgb2YgdGhlc2Ugc3R1ZGllczsgYW55IGRldGFpbHMgdGhhdCB2YXJpZWQgYWNyb3NzIHN0dWRpZXMgYXJlIHN1cHBsaWVkIGluIHRoZSAiTWV0aG9kcyIgc2VjdGlvbiBvZiBlYWNoIG9mIHRoZSBzdHVkaWVzLiAKCiMjIEdlbmVyYWwgbWV0aG9kcwoKRm9sbG93aW5nIFdlaXNtYW4gZXQgYWwuICgyMDE3KSwgdGhlc2Ugc3R1ZGllcyB3ZXJlIGRlc2lnbmVkIHdpdGggdGhlIGdvYWwgb2YgZm9jdXNpbmcgcGFydGljaXBhbnRzJyBhdHRlbnRpb24gb24gdGhlIHNpbWlsYXJpdGllcywgZGlmZmVyZW5jZXMsIGFuZCByZWxhdGlvbnNoaXBzIGFtb25nIHZhcmlvdXMgbWVudGFsIGNhcGFjaXRpZXMuCgpUbyB0aGlzIGVuZCwgZWFjaCBwYXJ0aWNpcGFudCB3YXMgZWl0aGVyIHJhbmRvbWx5IG9yIHBzZXVkby1yYW5kb21seSBhc3NpZ25lZCB0byBhc3Nlc3MgMS0yIHRhcmdldCBjaGFyYWN0ZXJzIChlLmcuLCBhIGJlZXRsZSwgYSByb2JvdCwgYSBnb2F0LCBldGMuKSBvbiBhIHdpZGUgcmFuZ2Ugb2Ygc2Vuc29yeSwgcGVyY2VwdHVhbCwgZW1vdGlvbmFsLCBzb2NpYWwsIGNvZ25pdGl2ZSwgYW5kIG90aGVyIG1lbnRhbCBjYXBhY2l0aWVzLCByYW5naW5nIGluIG51bWJlciBmcm9tIDE4LTQwIGFjcm9zcyBzdHVkaWVzIGFuZCBwcmVzZW50ZWQgaW4gZWl0aGVyIGEgcmFuZG9tIG9yIGEgcHNldWRvLXJhbmRvbSAoY291bnRlcmJhbGFuY2VkKSBvcmRlci4gUGFydGljaXBhbnRzIHdlcmUgcHJlc2VudGVkIHdpdGggYSB2aXZpZCwgZnVsbC1jb2xvciBwaG90b2dyYXBoIG9mIHRoZWlyIGFzc2lnbmVkIHRhcmdldCBpbiBhIG5hdHVyYWxpc3RpYyBjb250ZXh0IChlLmcuLCBhIGJlZXRsZSBvbiBhIGxlYWY7IGEgcm9ib3QgaW4gYW4gb2ZmaWNlOyBhIGdvYXQgaW4gYSBncmFzc3kgZmllbGQpLCB3aGljaCB0aGV5IGhhZCBhY2Nlc3MgdG8gdGhyb3VnaG91dCB0aGUgc3R1ZHkuIAoKT24gZWFjaCB0cmlhbCwgcGFydGljaXBhbnRzIHdlcmUgYXNrZWQgYSBxdWVzdGlvbiBvZiB0aGUgZm9ybSBEbyB5b3UgdGhpbmsgYSBbdGFyZ2V0XSBjYW4gW2RvIFhdPyAoZS5nLiwgIkRvIHlvdSB0aGluayBhIGJlZXRsZSBjYW4gZmVlbCBoYXBweT8iOyBTdHVkaWVzIDEtMikgb3IgQ2FuIFt0YXJnZXRzXSBbZG8gWF0/IChTdHVkeSAzKSAoZS5nLiwgIkNhbiBiZWV0bGVzIGZlZWwgaGFwcHk/IikuIFBhcnRpY2lwYW50cyByZXNwb25kZWQgb24gYSB0aHJlZS1wb2ludCBzY2FsZSAobm8sIGNvZGVkIGFzIDA7IGtpbmRhLCBjb2RlZCBhcyAwLjU7IG9yIHllcywgY29kZWQgYXMgMSkuIEFsdGhvdWdoIGEgdGhyZWUtcG9pbnQgc2NhbGUgaXMgbm90IG9wdGltYWwgZm9yIGZhY3RvciBhbmFseXNlcywgcGlsb3QgdGVzdGluZyBzdWdnZXN0ZWQgdGhhdCBpdCB3YXMgY3JpdGljYWwgaW4gYWxsb3dpbmcgY2hpbGRyZW4gdG8gbW92ZSBmYXN0IGVub3VnaCB0aHJvdWdoIHRoZSBzdHVkeSB0byBhbnN3ZXIgYWxsIHF1ZXN0aW9ucywgYW5kIG1haW50YWluaW5nIHRoaXMgd2l0aGluLXN1YmplY3RzIGRlc2lnbiB3YXMgb3VyIHRvcCBwcmlvcml0eSBmb3IgdGhlIHBsYW5uZWQgYW5hbHlzZXMuCgpTZWUgdGhlIE1ldGhvZHMgc2VjdGlvbiBmb3IgZWFjaCBzdHVkeSBmb3IgZGV0YWlscyBvZiB0aGUgcGFydGljdWxhciB0YXJnZXQgY2hhcmFjdGVycyBhbmQgbWVudGFsIGNhcGFjaXRpZXMgaW5jbHVkZWQgaW4gZWFjaCBzdHVkeSwgYXMgd2VsbCBhcyB0aGUgbWF0ZXJpYWxzIGFuZCBwaHlzaWNhbCBzZXR1cC4KCiMjIFByaW1hcnkgYW5hbHlzaXM6IEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyAoRUZBKQoKT3VyIHByaW1hcnkgZ29hbCBpbiBjb25kdWN0aW5nIHRoZXNlIHN0dWRpZXMgd2FzIHRvIHVuY292ZXIgYSBzZXQgb2YgbGF0ZW50IGNvbnN0cnVjdHMgdGhhdCBtaWdodCBwbGF1c2libHkgaGF2ZSBnaXZlbiByaXNlIHRvIHRoZSBvYnNlcnZlZCBjb3JyZWxhdGlvbnMgYW1vbmcgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBpbiBlYWNoIGdyb3VwIG9mIHBhcnRpY2lwYW50cy4gQXMgc3VjaCwgb3VyIHByaW1hcnkgcGxhbm5lZCBhbmFseXNpcyBmb3IgYWxsIHN0dWRpZXMgd2FzIGFuIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyAoRUZBKS4gRm9sbG93aW5nIFdlaXNtYW4gZXQgYWwuICgyMDE3KSwgd2UgaW50ZXJwcmV0ZWQgZWFjaCBvZiB0aGUgY29uc3RydWN0cyAoImZhY3RvcnMiKSBhcyBjb3JyZXNwb25kaW5nIHRvIGEgZnVuZGFtZW50YWwgY29tcG9uZW50IG9mIG1lbnRhbCBsaWZlLCBhY2NvcmRpbmcgdG8gdGhpcyBncm91cCBvZiBwYXJ0aWNpcGFudHM7IGJ5IGV4dGVuc2lvbiwgd2UgY29uc2lkZXIgdGhlIGZ1bGwgc2V0IG9mIGZhY3RvcnMgZm9yIGVhY2ggc2FtcGxlIHRvIHJlcHJlc2VudCB0byB0aGUgb3ZlcmFsbCAiY29uY2VwdHVhbCBzdHJ1Y3R1cmUiIHVuZGVybHlpbmcgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBmb3IgdGhpcyBncm91cCBvZiBwYXJ0aWNpcGFudHMuCgpGb3IgYWxsIEVGQXMsIHdlIHVzZWQgb3JkaW5hcnkgbGVhc3Qgc3F1YXJlcyB0byBmaW5kIHRoZSBtaW5pbXVtIHJlc2lkdWFsIHNvbHV0aW9uLCB1c2luZyB0aGUgInBzeWNoIiBwYWNrYWdlIGZvciBSIChSZXZlbGxlLCAyMDE4KS4gSGVyZSB3ZSBmb2N1cyBvbiByZXN1bHRzIHVzaW5nIFBlYXJzb24gY29ycmVsYXRpb25zIHVzaW5nIHBhaXJ3aXNlIGNvbXBsZXRlIG9ic2VydmF0aW9ucy4gKFNlZSBPbmxpbmUgU3VwcGxlbWVudGFyeSBNYXRlcmlhbHMgW09TTV0gZm9yIHNvbHV0aW9ucyB1c2luZyBwb2x5Y2hvcmljIGNvcnJlbGF0aW9ucywgd2hpY2ggYXJlIGJldHRlciBzdWl0ZWQgdG8gaGFuZGxlIHJlc3BvbnNlcyBvbiBhIHRocmVlLXBvaW50IHNjYWxlIGJ1dCwgdG8gb3VyIGV5ZXMsIHRlbmRlZCB0byBvdmVyLWZpdCBvdXIgZGF0YSBieSBzdWdnZXN0aW5nIHRoYXQgd2Ugc2hvdWxkIHJldGFpbiBtYW55IGZhY3RvcnMgdGhhdCBlYWNoIGFjY291bnRlZCBmb3Igb25seSBhIHNtYWxsIGFtb3VudCBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLikKCkluIG9yZGVyIHRvIGRldGVybWluZSBob3cgbWFueSBmYWN0b3JzIHRvIHJldGFpbiwgd2UgZXhhbWluZWQgdGhlIHJlc3VsdHMgb2YgdGhyZWUgZmFjdG9yIHJldGVudGlvbiBwcm90b2NvbHM6ICgxKSBQYXJhbGxlbCBBbmFseXNpcywgd2hpY2ggY29tcGFyZXMgdGhlIG9ic2VydmVkIGNvcnJlbGF0aW9uIHN0cnVjdHVyZSB0byB0aGUgY29ycmVsYXRpb24gc3RydWN0dXJlIGFyaXNpbmcgZnJvbSByYW5kb20gZGF0YXNldHMgb2YgdGhlIHNhbWUgc2l6ZTsgKDIpIE1pbmltaXppbmcgdGhlIEJheWVzaWFuIEluZm9ybWF0aW9uIENyaXRlcmlvbiAoQklDKSwgd2hpY2ggaXMgb25lIG1ldGhvZCBvZiBvcHRpbWl6aW5nIGJvdGggZ29vZG5lc3Mgb2YgZml0IGFuZCBwYXJzaW1vbnk7IGFuZCAoMykgQSBzZXQgb2YgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSB0aGF0IGhhdmUgYmVlbiB1c2VkIGluIFdlaXNtYW4gZXQgYWwuJ3MgKDIwMTcpIHByZXZpb3VzIHdvcmssIGluIHdoaWNoIHRoZXkgYmVnYW4gd2l0aCB0aGUgbWF4aW1hbCBudW1iZXIgb2YgZmFjdG9ycyBhY2NvcmRpbmcgdG8gYW4gYW5hbHlzaXMgb2YgZGVncmVlcyBvZiBmcmVlZG9tLCBhbmQgcmV0YWluZWQgZmFjdG9ycyB0aGF0IG1ldCBhbGwgdGhyZWUgb2YgdGhlIGZvbGxvd2luZyBjcml0ZXJpYTogKGEpIGhhZCBlaWdlbnZhbHVlcyBncmVhdGVyIHRoYW4gMS4wMCwgKGIpIGluZGl2aWR1YWxseSBhY2NvdW50ZWQgZm9yIGdyZWF0ZXIgdGhhbiA1JSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGJlZm9yZSByb3RhdGlvbiwgYW5kIChjKSB3ZXJlIHRoZSAiZG9taW5hbnQiIGZhY3RvciAodGhlIGZhY3RvciB3aXRoIHRoZSBzdHJvbmdlc3QgYWJzb2x1dGUgZmFjdG9yIGxvYWRpbmcpIGZvciBhdCBsZWFzdCAxIG1lbnRhbCBjYXBhY2l0eSBhZnRlciByb3RhdGlvbi4gRm9yIGVhY2ggc3R1ZHksIG91ciBpbnRlcnByZXRhdGlvbiBvZiBob3cgYmVzdCB0byBjaGFyYWN0ZXJpemUgdGhlIGRhdGFzZXQgKGkuZS4sIGhvdyBtYW55IGZhY3RvcnMgd2Ugb2JzZXJ2ZSkgd2FzIGRldGVybWluZWQgYnkgdGhlIGRlZ3JlZSBvZiBjb25zZW5zdXMgYW1vbmcgdGhlc2UgdGhyZWUgcHJvdG9jb2xzIGFuZCB0aGUgaW50ZXJwcmV0YWJpbGl0eSBvZiB0aGUgcmV0YWluZWQgZmFjdG9ycyB1bmRlciBlYWNoIHByb3RvY29sLiAKCkhlcmUgd2UgZm9jdXMgb3VyIGludGVycHJldGF0aW9ucyBvbiB2YXJpbWF4LXJvdGF0ZWQgc29sdXRpb25zLCB3aGljaCBjb25zdHJhaW4gYWxsIGZhY3RvcnMgdG8gYmUgb3J0aG9nb25hbC4gKFNlZSBPU00gZm9yIHNvbHV0aW9ucyB1c2luZyBvYmxpcXVlIFsib2JsaW1pbiJdIHJvdGF0aW9ucywgd2hpY2ggYWxsb3cgZm9yIGNvcnJlbGF0ZWQgZmFjdG9ycy4pCgojIyBTZWNvbmRhcnkgYW5hbHlzaXM6IFJlZ3Jlc3Npb24gYW5hbHlzZXMgb2YgZmFjdG9yIHNjb3JlcwoKSGF2aW5nIGluZmVycmVkIGEgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgcGFydGljaXBhbnRzIHZpYSBFRkEsIHdlIHRoZW4gc291Z2h0IHRvIGV4YW1pbmUgYXR0cmlidXRpb25zIG9mIG1lbnRhbCBjYXBhY2l0aWVzIHRvIHRoZSBwYXJ0aWN1bGFyIHRhcmdldCBjaGFyYWN0ZXJzIGluY2x1ZGVkIGluIGVhY2ggc3R1ZHkgd2l0aGluIHRoaXMgY29uY2VwdHVhbCBzdHJ1Y3R1cmU6IFRvIHdoYXQgZXh0ZW50IGRpZCBwYXJ0aWNpcGFudHMgYXR0cmlidXRlIGVhY2ggb2YgdGhlIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMgb2YgbWVudGFsIGxpZmUgcmV2ZWFsZWQgYnkgRUZBIHRvIGEgZ2l2ZW4gdGFyZ2V0IGNoYXJhY3RlciwgYW5kIGhvdyBkaWQgdGhpcyBhdHRyaWJ1dGlvbnMgdmFyeSB3aXRoIGFnZSAoZWl0aGVyIHdpdGhpbiBhbiBhZ2UgZ3JvdXAgb3IgYmV0d2VlbiBhZ2UgZ3JvdXBzKT8gVG8gZXhwbG9yZSB0aGlzIHF1ZXN0aW9uLCB3ZSBleGFtaW5lZCAiZmFjdG9yIHNjb3JlcyLigJRzdW1tYXJpZXMgb2YgZWFjaCBwYXJ0aWNpcGFudCdzIGF0dHJpYnV0aW9ucyBvZiBlYWNoIG9mIGZhY3RvcnMgcmV2ZWFsZWQgYnkgRUZBLiBXZSB1c2VkIHRoZSBjb3JyZWxhdGlvbi1wcmVzZXJ2aW5nICJ0ZW4gQmVyZ2UiIG1ldGhvZCAoYXMgaW1wbGVtZW50ZWQgaW4gdGhlICJwc3ljaCIgcGFja2FnZTsgUmV2ZWxsZSwgMjAxOCksIGltcHV0aW5nIG1pc3NpbmcgdmFsdWVzIHVzaW5nIHRoZSBtZWFuIChieSB0YXJnZXQgY2hhcmFjdGVyLCBjYXBhY2l0eSwgYW5kIGFnZSBncm91cCkuIFRoaXMgeWllbGRlZCBvbmUgZmFjdG9yIHNjb3JlIGZvciBlYWNoIG9mIHRoZSBmYWN0b3JzIHJldmVhbGVkIGJ5IEVGQSBmb3IgZWFjaCBwYXJ0aWNpcGFudC4KCldlIGFuYWx5emVkIHRoZXNlIGZhY3RvciBzY29yZXMgdmlhIG1peGVkIGVmZmVjdHMgQmF5ZXNpYW4gcmVncmVzc2lvbiBhbmFseXNlcyB1c2luZyB0aGUgImJybXMiIHBhY2thZ2UgZm9yIFIgKELDvHJrbmVyLCAyMDE3KS4gSW4gYWxsIG9mIHRoZXNlIGFuYWx5c2VzLCB3ZSBpbmNsdWRlZCB0aGUgbWF4aW1hbCByYW5kb20gZWZmZWN0IHN0cnVjdHVyZXMgZ2l2ZW4gdGhlIGRlc2lnbiBmb3IgdGhlIHJlbGV2YW50IHN0dWR5LiBGdXJ0aGVyIGRldGFpbHMgdmFyaWVkIGJ5IHN0dWR5LCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiB0YXJnZXQgY2hhcmFjdGVycyBpbmNsdWRlZCBpbiB0aGF0IHN0dWR5LCB0aGUgbnVtYmVyIG9mIGZhY3RvcnMgcmV2ZWFsZWQgYnkgRUZBIGZvciB0aGUgcmVsZXZhbnQgZ3JvdXAocykgb2YgcGFydGljaXBhbnRzLCBhbmQgdGhlIGdvYWxzIG9mIHRoZSBhbmFseXNpcyAoZS5nLiwgY29tcGFyaW5nIHR3byBhZ2UgZ3JvdXBzIHZzLiBleGFtaW5pbmcgY29udGludW91cyBlZmZlY3RzIG9mIGFnZSB3aXRoaW4gb25lIG9yIG1vcmUgZ3JvdXBzIG9mIHBhcnRpY2lwYW50cykuCgojIFN0dWR5IDEKClRoZSBnb2FsIG9mIFN0dWR5IDEgd2FzIHRvIGRldmVsb3AgYSBjaGlsZC1mcmllbmRseSB2ZXJzaW9uIG9mIFdlaXNtYW4gZXQgYWwuJ3MgKDIwMTcpIHN0dWR5IHBhcmFkaWdtIGFuZCBjb25kdWN0IGFuIGluaXRpYWwgZXhwbG9yYXRpb24gb2YgdGhpcyBjb25jZXB0dWFsIHN0cnVjdHVyZSBhbW9uZyBjaGlsZHJlbi4gCgpQaWxvdCB0ZXN0aW5nIHN1Z2dlc3RlZCB0aGF0IGNoaWxkcmVuIGFzIHlvdW5nIGFzIDcgeWVhcnMgb2YgYWdlIGZvdW5kIHRoZSBwYXJhZGlnbSBlYXN5IGFuZCBlbmpveWFibGUsIGFuZCB3b3JrIG9uIHRoZSBkZXZlbG9wbWVudCBvZiBsYXkgYmlvbG9neSBhbmQgcHN5Y2hvbG9neSBoYXMgc3VnZ2VzdGVkIHRoYXQgdGhlc2UgY29uY2VwdHMgbWF5IGNvbnRpbnVlIHRvIGRldmVsb3Agd2VsbCBpbnRvIG1pZGRsZSBjaGlsZGhvb2QgKGUuZy4sIENhcmV5LCAxOTg1OyBIYXRhbm8gJiBJbmFnYWtpLCAxOTk3OyBQaWFnZXQsIDE5Mjk7IGNmLiBHZWxtYW4gJiBPcGZlciwgMjAwMikuIFRodXMsIHdlIHRhcmdldGVkIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gZm9yIG91ciBmaXJzdCBjaGlsZCBzYW1wbGUuIFdlIGFsc28gcmVjcnVpdGVkIGEgZ3JvdXAgb2YgYWR1bHRzIHRvIHZhbGlkYXRlIG91ciBjaGlsZC0gZnJpZW5kbHkgcGFyYWRpZ20sIGkuZS4sIHRvIGV2YWx1YXRlIHdoZXRoZXIgaXQgcmVwbGljYXRlZCBXZWlzbWFuIGV0IGFsLidzICgyMDE3KSBvcmlnaW5hbCB3b3JrIHdpdGggYWR1bHRzLgpJbiBXZWlzbWFuIGV0IGFsLidzICgyMDE3KSBvcmlnaW5hbCBzdHVkaWVzLCBwYXJ0aWNpcGFudHMgZXZhbHVhdGVkIGEgdGFyZ2V0IGNoYXJhY3RlciBvbiA0MCBtZW50YWwgY2FwYWNpdGllcyB1c2luZyBhIHNldmVuLXBvaW50IExpa2VydC10eXBlIHNjYWxlLiBQaWxvdCB0ZXN0aW5nIHN1Z2dlc3RlZCB0d28gbmVjZXNzYXJ5IG1vZGlmaWNhdGlvbnMgZm9yIGNoaWxkcmVuOiByZXdvcmRpbmcgc29tZSBvZiB0aGUgbWVudGFsIGNhcGFjaXR5IGl0ZW1zLCBhbmQgdXNpbmcgYSBzaW1wbGVyLCB0aHJlZS1wb2ludCByZXNwb25zZSBzY2FsZSAobm8sIGtpbmRhLCBvciB5ZXM7IHNlZSAiT3ZlcnZpZXcgb2YgTWV0aG9kcyBhbmQgQW5hbHlzZXMsIGFib3ZlIikuIAoKIyMgTWV0aG9kCgojIyMgUGFydGljaXBhbnRzCgpgciBucm93KGQxX2FkX3dpZGUpICsgbnJvdyhkMV83OV93aWRlKWAgcGVvcGxlIHBhcnRpY2lwYXRlZCBpbiB0aGlzIHN0dWR5LgoKYGBge3J9CiMgZGVtb2dyYXBoaWNzCmQxX2FkX2dlbmRlciA8LSBkZW1vX2Z1bihkMV9hZCwgImdlbmRlciIsIDIpCmQxX2FkX2V0aG5pY2l0eSA8LSBkZW1vX2Z1bihkMV9hZCwgImV0aG5pY2l0eV9jYXQiLCAyKQpkMV9hZF9lbmdsaXNoIDwtIGRlbW9fZnVuKGQxX2FkLCAiZW5nbGlzaE5hdGl2ZSIsIDIpCmBgYAoKQWR1bHRzIChfbl89YHIgbnJvdyhkMV9hZF93aWRlKWApIHBhcnRpY2lwYXRlZCB2aWEgQW1hem9uIE1lY2hhbmljYWwgVHVyayAoTVR1cmspIGluIEp1bHkgMjAxNi4gQWR1bHQgcGFydGljaXBhbnRzIGhhZCBnYWluZWQgYXBwcm92YWwgZm9yIGF0IGxlYXN0IDk1JSBvZiB0aGVpciBwcmV2aW91cyB3b3JrIG9uIE1UdXJrOyBoYWQgTVR1cmsgYWNjb3VudHMgYmFzZWQgaW4gdGhlIFVTOyBhbmQgaW5kaWNhdGVkIHRoYXQgdGhleSB3ZXJlIGF0IGxlYXN0IDE4IHllYXJzIG9sZC4gQWR1bHRzIHdlcmUgcGFpZCBcJDAuMzAgZm9yIGFwcHJveGltYXRlbHkgMi0zIG1pbnV0ZXMgb2YgdGhlaXIgdGltZSAobWVkaWFuIGR1cmF0aW9uOiBgciBzdW1tYXJ5KGQxX2FkJGR1cmF0aW9uKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpYCBtaW4pLiAKCkFjY29yZGluZyB0byBzZWxmIHJlcG9ydCwgdGhlIGFkdWx0IHNhbXBsZSByYW5nZWQgaW4gYWdlIGZyb20gYHIgc3VtbWFyeShkMV9hZCRhZ2UpWyJNaW4uIl1gLWByIHN1bW1hcnkoZDFfYWQkYWdlKVsiTWF4LiJdYCB5ZWFycyAobWVkaWFuOiBgciBzdW1tYXJ5KGQxX2FkJGFnZSlbIk1lZGlhbiJdYHkpIGFuZCB3YXMgcm91Z2hseSBzcGxpdCBiZXR3ZWVuIHdvbWVuIChgciBkMV9hZF9nZW5kZXIkcHJvcFtkMV9hZF9nZW5kZXIkZ2VuZGVyPT0iZmVtYWxlIl0gKiAxMDBgJSkgYW5kIG1lbiAoYHIgZDFfYWRfZ2VuZGVyJHByb3BbZDFfYWRfZ2VuZGVyJGdlbmRlcj09Im1hbGUiXSAqIDEwMGAlOyBgciBkMV9hZF9nZW5kZXIkcHJvcFtkMV9hZF9nZW5kZXIkZ2VuZGVyPT0ib3RoZXJfcHJlZk5vIl0gKiAxMDBgJSBvZiBwYXJ0aWNpcGFudHMgaWRlbnRpZmllZCBhcyBzb21lIG90aGVyIGdlbmRlciBvciBvcHRlZCBub3QgdG8gZGlzY2xvc2UpLiBBZHVsdHMgcHJlZG9taW5hbnRseSBpZGVudGlmaWVkIGFzIFdoaXRlIChgciBkMV9hZF9ldGhuaWNpdHkkcHJvcFtkMV9hZF9ldGhuaWNpdHkkZXRobmljaXR5X2NhdD09IndoaXRlIl0gKiAxMDBgJTsgYHIgZDFfYWRfZXRobmljaXR5JHByb3BbZDFfYWRfZXRobmljaXR5JGV0aG5pY2l0eV9jYXQ9PSJtdWx0aSJdICogMTAwYCUgaWRlbnRpZmllZCBhcyBtb3JlIHRoYW4gb25lIHJhY2UvZXRobmljaXR5LCBhbmQgJFxsZXEkIGByIGRhdGEuZnJhbWUoZDFfYWRfZXRobmljaXR5ICU+JSBmaWx0ZXIoIWV0aG5pY2l0eV9jYXQgJWluJSBjKCJ3aGl0ZSIsICJtdWx0aSIpKSkkcHJvcCAlPiUgbWF4KCkgKiAxMDBgJSBhcyBhbnkgb3RoZXIgcmFjZS9ldGhuaWNpdHkpLiBUaGUgdmFzdCBtYWpvcml0eSBvZiBhZHVsdHMgcmVwb3J0ZWQgRW5nbGlzaCBiZWluZyB0aGVpciBvbmx5IG5hdGl2ZSBsYW5ndWFnZSAoYHIgZDFfYWRfZW5nbGlzaCRwcm9wW2QxX2FkX2VuZ2xpc2gkZW5nbGlzaE5hdGl2ZSA9PSAieWVzX29ubHkiXSAqIDEwMGAlOyBhbiBhZGRpdGlvbmFsIGByIGQxX2FkX2VuZ2xpc2gkcHJvcFtkMV9hZF9lbmdsaXNoJGVuZ2xpc2hOYXRpdmUgPT0gInllc19tdWx0aXBsZSJdICogMTAwYCUgaW5kaWNhdGVkIHRoYXQgRW5nbGlzaCB3YXMgb25lIG9mIG11bHRpcGxlIG5hdGl2ZSBsYW5ndWFnZXMgZm9yIHRoZW0uKQoKYGBge3J9CiMgZGVtb2dyYXBoaWNzCmQxXzc5X2dlbmRlciA8LSBkZW1vX2Z1bihkMV83OSwgImdlbmRlciIsIDIpCmQxXzc5X2V0aG5pY2l0eSA8LSBkZW1vX2Z1bihkMV83OSwgImV0aG5pY2l0eSIsIDIpCmQxXzc5X2JpbGluZ3VhbCA8LSBkZW1vX2Z1bihkMV83OSwgImJpbGluZ3VhbCIsIDIpCmBgYAoKQ2hpbGRyZW4gKF9uXz1gciBucm93KGQxXzc5X3dpZGUpYCkgcGFydGljaXBhdGVkIGF0IG9uZSBvZiBzZXZlcmFsIFNhbiBGcmFuY2lzY28gQmF5IEFyZWEgbXVzZXVtcyBvciBhdCB0aGVpciB5b3VuZ2VyIHNpYmxpbmcncyBwcmVzY2hvb2wgYmV0d2VlbiBKdWx5LURlY2VtYmVyIDIwMTYuIFRoZSBzdHVkeSB0b29rIG1vc3QgY2hpbGRyZW4gdW5kZXIgMTAgbWludXRlcyB0byBjb21wbGV0ZSAobWVkaWFuIGR1cmF0aW9uOiBgciBzdW1tYXJ5KGQxXzc5JGR1cmF0aW9uKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpYCBtaW4pLiBBbiBhZGRpdGlvbmFsIDEyIGNoaWxkcmVuIHBhcnRpY2lwYXRlZCBidXQgd2VyZSBleGNsdWRlZCBmb3IgYmVpbmcgb3V0c2lkZSB0aGUgdGFyZ2V0IGFnZSByYW5nZSAoX25fPTcpLCBiZWluZyBvZiB1bmtub3duIGFnZSAoX25fPTQpLCBvciBiZWluZyBzaG93biBhIHRhcmdldCBjaGFyYWN0ZXIgb3RoZXIgdGhhbiBhIGJlZXRsZSBvciBhIHJvYm90IChfbl89MSkuIENoaWxkcmVuIHJlY2VpdmVkIGEgc21hbGwgdGhhbmsteW91IGdpZnQgKGUuZy4sIGEgc3RpY2tlcikgZm9yIHRoZWlyIHBhcnRpY2lwYXRpb24uIAoKQ2hpbGRyZW4gcmFuZ2VkIGluIGFnZSBmcm9tIGByIHN1bW1hcnkoZDFfNzkkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKWAtYHIgc3VtbWFyeShkMV83OSRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpYCB5ZWFycyAobWVkaWFuOiBgciBzdW1tYXJ5KGQxXzc5JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKWB5KS4gQWNjb3JkaW5nIHRvIHBhcmVudGFsIHJlcG9ydCwgdGhlIGNoaWxkIHNhbXBsZSBpbmNsdWRlZCBzbGlnaHRseSBtb3JlIGdpcmxzIChgciBkMV83OV9nZW5kZXIkcHJvcFtkMV83OV9nZW5kZXIkZ2VuZGVyPT0iZiJdICogMTAwYCUpIHRoYW4gYm95cyAoYHIgZDFfNzlfZ2VuZGVyJHByb3BbZDFfNzlfZ2VuZGVyJGdlbmRlcj09Im0iXSAqIDEwMGAlOyBgciBkMV83OV9nZW5kZXIkcHJvcFtkMV83OV9nZW5kZXIkZ2VuZGVyPT0iTUlTU0lORyJdICogMTAwYCUgb2YgY2hpbGRyZW4ncyBnZW5kZXIgd2FzIG5vbi1iaW5hcnkgb3IgdW5rbm93bikuIFBhcmVudHMgcHJlZG9taW5hbnRseSBpZGVudGlmaWVkIHRoZWlyIGNoaWxkcmVuIGFzIFdoaXRlIChgciBkMV83OV9ldGhuaWNpdHkkcHJvcFtkMV83OV9ldGhuaWNpdHkkZXRobmljaXR5PT0id2hpdGUiXSAqIDEwMGAlKSwgbXVsdGlyYWNpYWwgKGByIGQxXzc5X2V0aG5pY2l0eSRwcm9wW2QxXzc5X2V0aG5pY2l0eSRldGhuaWNpdHk9PSJtdWx0aSJdICogMTAwYCUpLCBFYXN0IEFzaWFuIChgciBkMV83OV9ldGhuaWNpdHkkcHJvcFtkMV83OV9ldGhuaWNpdHkkZXRobmljaXR5PT0iZWFzdCBhc2lhbiJdICogMTAwYCUpLCBvciBTb3V0aCBBc2lhbiAoYHIgZDFfNzlfZXRobmljaXR5JHByb3BbZDFfNzlfZXRobmljaXR5JGV0aG5pY2l0eT09InNvdXRoIG9yIHNvdXRoZWFzdCBhc2lhbiJdICogMTAwYCU7ICRcbGVxJCBgciBkYXRhLmZyYW1lKGQxXzc5X2V0aG5pY2l0eSAlPiUgZmlsdGVyKCFldGhuaWNpdHkgJWluJSBjKCJ3aGl0ZSIsICJtdWx0aSIsICJlYXN0IGFzaWFuIiwgInNvdXRoIG9yIHNvdXRoZWFzdCBhc2lhbiIsICJNSVNTSU5HIikpKSRwcm9wICU+JSBtYXgoKSAqIDEwMGAlIG9mIGNoaWxkcmVuIHdlcmUgaWRlbnRpZmllZCBhcyBhbnkgb3RoZXIgcmFjZS9ldGhuaWNpdHksIGFuZCBgciBkMV83OV9ldGhuaWNpdHkkcHJvcFtkMV83OV9ldGhuaWNpdHkkZXRobmljaXR5PT0iTUlTU0lORyJdICogMTAwYCUgb2YgY2hpbGRyZW4ncyByYWNlL2V0aG5pY2l0eSB3YXMgdW5rbm93bikuIFJvdWdobHkgaGFsZiBvZiBwYXJlbnRzIChgciBkMV83OV9iaWxpbmd1YWwkcHJvcFtkMV83OV9iaWxpbmd1YWwkYmlsaW5ndWFsPT0ieWVzIl0gKiAxMDBgJSkgcmVwb3J0ZWQgdGhhdCB0aGVpciBjaGlsZCB3YXMgYmlsaW5ndWFsICh0aG91Z2gsIGFuZWNkb3RhbGx5LCBwYXJlbnRzJyBpbnRlcnByZXRhdGlvbnMgb2YgImJpbGluZ3VhbCIgcmFuZ2VkIGZyb20gdGFraW5nIGNsYXNzZXMgYXQgc2Nob29sIHRvIHNwZWFraW5nIGEgbGFuZ2F1Z2UgYXQgaG9tZSkuCgojIyMgTWF0ZXJpYWxzIGFuZCBwcm9jZWR1cmUKCkZvbGxvd2luZyBXZWlzbWFuIGV0IGFsLiAoMjAxNywgU3R1ZGllcyAxLTMpLCBwYXJ0aWNpcGFudHMgd2VyZSByYW5kb21seSBhc3NpZ25lZCB0byBhc3Nlc3MgdGhlIG1lbnRhbCBjYXBhY2l0aWVzIG9mIG9uZSBvZiB0d28gImVkZ2UgY2FzZXMiIGluIHNvY2lhbCByZWFzb25pbmc6IGEgYmVldGxlIChfbl89YHIgZDFfYWQgJT4lIGZpbHRlcihjaGFyYWN0ZXIgPT0gImJlZXRsZSIpICU+JSBkaXN0aW5jdChzdWJpZCkgJT4lIG5yb3coKWAgYWR1bHRzLCBfbl89YHIgZDFfNzkgJT4lIGZpbHRlcihjaGFyYWN0ZXIgPT0gImJlZXRsZSIpICU+JSBkaXN0aW5jdChzdWJpZCkgJT4lIG5yb3coKWAgY2hpbGRyZW4pIG9yIGEgcm9ib3QgKF9uXz1gciBkMV9hZCAlPiUgZmlsdGVyKGNoYXJhY3RlciA9PSAicm9ib3QiKSAlPiUgZGlzdGluY3Qoc3ViaWQpICU+JSBucm93KClgIGFkdWx0cywgX25fPWByIGQxXzc5ICU+JSBmaWx0ZXIoY2hhcmFjdGVyID09ICJyb2JvdCIpICU+JSBkaXN0aW5jdChzdWJpZCkgJT4lIG5yb3coKWAgY2hpbGRyZW4pLiBCZWNhdXNlIGJlZXRsZXMgYXJlIGFuaW1hbHMgYW5kIHJvYm90cyBhcmUgYXJ0aWZhY3RzLCB0aGlzIHBhaXIgcHJvdmlkZXMgaW5zaWdodCBpbnRvIHRoZSByb2xlIG9mIGJpb2xvZ2ljYWwgbGlmZSBpbiBhdHRyaWJ1dGlvbnMgb2YgbWVudGFsIGxpZmXigJRhbiBpc3N1ZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0IGZyb20gYSBkZXZlbG9wbWVudGFsIHBlcnNwZWN0aXZlLCBnaXZlbiB0aGUgbG9uZyBoaXN0b3J5IG9mIHdvcmsgb24gdGhlIGRldmVsb3BtZW50IG9mIHRoZSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiBhbmQgaXRzIHJlbGF0aW9uIHRvIGZvbGsgcHN5Y2hvbG9neS4gTW9zdCBjcml0aWNhbGx5IGZvciBvdXIgYm90dG9tLXVwIGFwcHJvYWNoIHRvIHVuY292ZXJpbmcgY29uY2VwdHVhbCBzdHJ1Y3R1cmUsIHRoZSAibWVudGFsIGxpdmVzIiBvZiB0aGVzZSBlbnRpdGllcyBhcmUgY29udHJvdmVyc2lhbDogUGVvcGxlIGRpZmZlciBpbiB0aGVpciBhc3Nlc3NtZW50cyBvZiB0aGUgbWVudGFsIGNhcGFjaXRpZXMgb2YgYmVldGxlcyBhbmQgcm9ib3RzLiBUaGlzIGFsbG93ZWQgdXMgdG8gYWRkcmVzcyB0aGUgZm9sbG93aW5nIHF1ZXN0aW9uOiBXaGVuIHBhcnRpY2lwYW50cyBkaXNhZ3JlZSBhYm91dCB0aGUgbWVudGFsIGNhcGFjaXRpZXMgb2Ygc29tZSBlbnRpdHksIHdoaWNoIGNhcGFjaXRpZXMgImdvIHRvZ2V0aGVyIj8KCkluc3RydWN0aW9ucyB0byBwYXJ0aWNpcGFudHMgZm9jdXNlZCBvbiB0aGUgaWRlYSB0aGF0IHdlIHdhbnRlZCB0byBrbm93IHdoYXQgcGFydGljaXBhbnRzIHRob3VnaHQgIltiZWV0bGVzL3JvYm90c10gY2FuIGRvIGFuZCBjYW4gbm90IGRvLiIgUGFydGljaXBhbnRzIHJhdGVkIHRoZSB0YXJnZXQgY2hhcmFjdGVyIG9uIDQwIG1lbnRhbCBjYXBhY2l0aWVzLCBwcmVzZW50ZWQgaW4gYSByYW5kb20gb3JkZXIgZm9yIGVhY2ggcGFydGljaXBhbnQuIE9uIGVhY2ggdHJpYWwsIHBhcnRpY2lwYW50cyByZXNwb25kZWQgX25vXywgX2tpbmRhXywgb3IgX3llc18gdG8gdGhlIHF1ZXN0aW9uICJEbyB5b3UgdGhpbmsgYSBbYmVldGxlL3JvYm90XSBjYW4uLi4/IiBUaGUgdGhyZWUgcmVzcG9uc2Ugb3B0aW9ucyB3ZXJlIHZpc2libGUgdGhyb3VnaG91dCB0aGUgZXhwZXJpbWVudC4KClRoZSA0MCBtZW50YWwgY2FwYWNpdGllcyB3ZXJlIGRlc2lnbmVkIHRvIGJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIGluIFdlaXNtYW4gZXQgYWwuJ3MgKDIwMTcpIG9yaWdpbmFsIHN0dWRpZXMsIHdoaWxlIGJlaW5nIGNvbXByZWhlbnNpYmxlIHRvIGNoaWxkcmVuIGluIGVhcmx5IGVsZW1lbnRhcnkgc2Nob29sLiBUaGlzIHNldCBvZiBpdGVtcyBpbmNsdWRlZCBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgcmVsYXRlZCB0byBiaW9sb2dpY2FsIG5lZWRzIChlLmcuLCBfZ2V0IGh1bmdyeV8pOyBlbW90aW9uYWwgZXhwZXJpZW5jZXMgKGUuZy4sIF9mZWVsIGhhcHB5Xyk7IHBlcmNlcHR1YWwgYWJpbGl0aWVzIChlLmcuLCBfaGVhciBzb3VuZHNfKTsgY29nbml0aXZlIGFiaWxpdGllcyAoZS5nLiwgX3JlbWVtYmVyIHRoaW5nc18pOyBjYXBhY2l0aWVzIHJlbGF0ZWQgdG8gYXV0b25vbXkgb3IgYWdlbmN5IChlLmcuLCBfZGVjaWRlIHdoYXQgdG8gZG9fKTsgc29jaWFsIGFiaWxpdGllcyAoZS5nLiwgX2ZlZWwgZ3VpbHR5Xyk7IGFuZCBzZXZlcmFsIGFkZGl0aW9uYWwgaXRlbXMgKGUuZy4sIF9iZSBhd2FyZSBvZiBpdHNlbGZfKS4gRWFjaCBvZiB0aGVzZSBhIHByaW9yaSBjYXRlZ29yaWVzIGluY2x1ZGVkIGF0IGxlYXN0IGZpdmUgaXRlbXMgb2YgdmFyeWluZyB2YWxlbmNlLCBjb21wbGV4aXR5LCBhbmQgcGhyYXNpbmcuIChTZWUgRmlndXJlIDEgZm9yIHRoZSBmdWxsIGxpc3Qgb2YgbWVudGFsIGNhcGFjaXRpZXMgaW5jbHVkZWQgaW4gU3R1ZHkgMS4pCgpXZSBhbHNvIHByZXBhcmVkIGEgc2hvcnQgZGVmaW5pdGlvbiBmb3IgZWFjaCBpdGVtLCBzbyBhcyB0byBiZSBjb25zaXN0ZW50IGluIG91ciByZXNwb25zZXMgdG8gcGFydGljaXBhbnRzIChwYXJ0aWN1bGFybHkgY2hpbGRyZW4pIGlmIHRoZXkgYXNrZWQgZm9yIGNsYXJpZmljYXRpb24uIENoaWxkcmVuIHdlcmUgZW5jb3VyYWdlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHVkeSB0byBhc2sgcXVlc3Rpb25zIGlmIHRoZXkgZGlkIG5vdCBrbm93IHdoYXQgYSB3b3JkIG1lYW50LCBpbiB3aGljaCBjYXNlIHRoZXkgZ2l2ZW4gdGhlc2UgZGVmaW5pdGlvbnM7IGFkdWx0cyB3ZXJlIHRvbGQgdGhhdCB0aGV5IGNvdWxkIGFjY2VzcyB0aGVzZSBkZWZpbml0aW9ucyBieSBob3ZlcmluZyBvdmVyIHRoZSB0ZXh0IG9uIHRoZSBjb21wdXRlciBzY3JlZW4uIFBpbG90IHRlc3Rpbmcgc3VnZ2VzdGVkIHRoYXQgc2V2ZW4gaXRlbXMgcmVxdWlyZWQgY2xhcmlmaWNhdGlvbiBmb3IgbW9zdCBjaGlsZHJlbiwgc28gdGhlc2UgaXRlbXMgd2VyZSBhbHdheXMgYWNjb21wYW5pZWQgYnkgdGhlaXIgZGVmaW5pdGlvbnMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmlhbCAoZm9yIGJvdGggYWR1bHRzIGFuZCBjaGlsZHJlbiksIGFzIGZvbGxvd3M6IF9oYXZlIGEgcGVyc29uYWxpdHksIGxpa2Ugd2hlbiBzb21lb25lIGlzIHNoeSBhbmQgc29tZWJvZHkgZWxzZSBpcyBzaWxseV87IF9oYXZlIGJlbGllZnMsIGxpa2Ugd2hlbiB5b3UgdGhpbmsgc29tZXRoaW5nIGlzIHRydWVfOyBfZmVlbCBwbGVhc3VyZSwgbGlrZSB3aGVuIHNvbWV0aGluZyBmZWVscyByZWFsbHkgZ29vZF87IF9oYXZlIGRlc2lyZXMsIGxpa2Ugd2hlbiB5b3UgcmVhbGx5IHdhbnQgc29tZXRoaW5nXzsgX2hhdmUgc2VsZi0gY29udHJvbCwgbGlrZSB3aGVuIHlvdSBzdG9wIHlvdXJzZWxmIGZyb20gZG9pbmcgc29tZXRoaW5nIHlvdSBzaG91bGRuJ3QgZG9fOyBfaGF2ZSBnb2FscywgbGlrZSB3aGVuIHlvdSdyZSB0cnlpbmcgaGFyZCB0byBkbyBzb21ldGhpbmcgb3IgbWFrZSBzb21ldGhpbmcgaGFwcGVuXzsgYW5kIF9mZWVsIHNpY2ssIGxpa2Ugd2hlbiB5b3UgZmVlbCBsaWtlIHlvdSBtaWdodCB0aHJvdyB1cF8uIAoKQWR1bHRzIGNvbXBsZXRlZCB0aGUgc3R1ZHkgYnkgY2xpY2tpbmcgdGhyb3VnaCBhIHdlYnNpdGUgYXQgdGhlaXIgb3duIHBhY2UsIHdpdGggb25lIHRyaWFsIHByZXNlbnRlZCBvbiBlYWNoIHBhZ2UgYW5kIG5vIGFiaWxpdHkgdG8gZ28gYmFja3dhcmRzLiBDaGlsZHJlbiBjb21wbGV0ZWQgdGhlIHN0dWR5IG9uIGFuIGV4cGVyaW1lbnRlcidzIGxhcHRvcCBjb21wdXRlci4gVGhlIGV4cGVyaW1lbnRlciByZWFkIHRoZSBpbnN0cnVjdGlvbnMgYW5kIHRoZSBmaXJzdCBzZXZlcmFsIHRyaWFscyBvdXQgbG91ZCwgcmVxdWVzdGluZyB2ZXJiYWwgcmVzcG9uc2VzIGZyb20gdGhlIGNoaWxkIGFuZCBzZWxlY3RlZCBoaXMgb3IgaGVyIHJlc3BvbnNlIGZvciBoZXI7IGFmdGVyIHNldmVyYWwgdHJpYWxzLCB0aGUgZXhwZXJpbWVudGVyIGdhdmUgdGhlIGNoaWxkIHRoZSBvcHRpb24gdG8gY29udGludWUgaW5kZXBlbmRlbnRseSAocmVhZGluZyB0aGUgcXVlc3Rpb25zIGFuZCBzZWxlY3RpbmcgdGhlaXIgYW5zd2VycyB0aGVtc2VsdmVzKSBpZiB0aGV5IGRlc2lyZWQuIFJvdWdobHkgaGFsZiBvZiBwYXJ0aWNpcGFudHMgY29tcGxldGVkIHRoZSByZW1haW5kZXIgb2YgdGhlIHRhc2sgaW5kZXBlbmRlbnRseS4KCiMjIyBEYXRhIHByb2Nlc3NpbmcKCldlIGRyb3BwZWQgdHJpYWxzIHdpdGggcmVzcG9uc2UgdGltZXMgdGhhdCB3ZXJlIGZhc3RlciB0aGFuIGEgcHJlc2V0IGNyaXRlcmlvbiBvZiAyNTBtcyAoX25fPTMgY2hpbGQgdHJpYWxzLCBfbl89OTcgYWR1bHQgdHJpYWxzKSBhbmQgcmV0YWluZWQgcGFydGljaXBhbnRzIHJlZ2FyZGxlc3Mgb2Ygc2tpcHBlZCB0cmlhbHMgKF9uXz01NSBjaGlsZCB0cmlhbHMsIF9uXz0xIGFkdWx0IHRyaWFsKS4gT3ZlcmFsbCwgb25seSAxJSBvZiBhZHVsdCB0cmlhbHMgYW5kIDElIG9mIGNoaWxkIHRyaWFscyB3ZXJlIG1pc3NpbmcgZGF0YTsgaW4gdGhlc2UgY2FzZXMsIHdlIGltcHV0ZWQgbWlzc2luZyB2YWx1ZXMgdXNpbmcgdGhlIG1lZGlhbiBieSB0YXJnZXQgY2hhcmFjdGVyLCBjYXBhY2l0eSwgYW5kIGFnZSBncm91cC4KCiMjIFJlc3VsdHMKCiMjIyBDb25jZXB0dWFsIHN0cnVjdHVyZTogQWR1bHRzCgpgYGB7cn0KIyBpbXBsZW1lbnQgMyBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scwpuZmFjdF9wYXJfZDFfYWQgPC0gZmEucGFyYWxsZWwoZDFfYWRfd2lkZV9pLCBjb3IgPSBjaG9zZW5fY29yLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtID0gY2hvc2VuX2ZtKSRuZmFjdApuZmFjdF9iaWNfZDFfYWQgPC0gdnNzKGQxX2FkX3dpZGVfaSwgY29yID0gY2hvc2VuX2Nvciwgcm90YXRlID0gY2hvc2VuX3JvdCwgCiAgICAgICAgICAgICAgICAgICAgICAgZm0gPSBjaG9zZW5fZm0pJHZzcy5zdGF0cyRCSUMgJT4lIHdoaWNoLm1pbigpCm5mYWN0X3dkbV9kMV9hZCA8LSByZXRlbl9mdW4oZDFfYWRfd2lkZV9pLCByb3RfdHlwZSA9IGNob3Nlbl9yb3QpCgpjYXQoIlBhcmFsbGVsIGFuYWx5c2lzOiAiLCBuZmFjdF9wYXJfZDFfYWQsCiAgICAiXG5NaW5pbWl6aW5nIEJJQzogIiwgbmZhY3RfYmljX2QxX2FkLAogICAgIlxuV2Vpc21hbiBldCBhbC46ICIsIG5mYWN0X3dkbV9kMV9hZCkKYGBgCgpgYGB7cn0KZWZhXzRfZDFfYWQgPC0gZmFfZnVuKGQxX2FkX3dpZGVfaSwgNCkKCmBgYAoKVHdvIG9mIG91ciB0aHJlZSBtZXRob2RzIGZvciBkZXRlcm1pbmluZyBob3cgbWFueSBmYWN0b3JzIHRvIHJldGFpbiAobWluaW1pemluZyBCSUMgYW5kIFdlaXNtYW4gZXQgYWwuJ3MgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSkgc3VnZ2VzdGVkIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzLiAoUGFyYWxsZWwgYW5hbHlzaXMgc3VnZ2VzdGVkIHJldGFpbmluZyBmb3VyIGZhY3RvcnMuIFRocmVlIG9mIHRoZXNlIGZhY3RvcnMgd2VyZSB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHRocmVlIGZhY3RvcnMgcmVwb3J0ZWQgYmVsb3csIGFuZCB0aGUgZm91cnRoIGZhY3RvciB3YXMgZG9taW5hbnQgZm9yIGEgaGFuZGZ1bCBvZiBzZW5zb3J5IGFuZCBwZXJjZXB0dWFsIGNhcGFjaXRpZXMsIGluY2x1ZGluZyBgciB0b3Bfbl9kb21DYXAoZWZhXzRfZDFfYWQsIDQsICJGNCIsICJwb3MiKWA7IHNlZSBTT00uKQoKYGBge3J9CmVmYV8zX2QxX2FkIDwtIGZhX2Z1bihkMV9hZF93aWRlX2ksIDMpCmVmYV8zX3Bsb3RfZDFfYWQgPC0gaGVhdG1hcF9mdW4oZWZhXzNfZDFfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGMoIkhFQVJUIiwgIkJPRFkiLCAiTUlORCIpKSArCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiQWR1bHRzIChuPSIsIG5yb3coZDFfYWRfd2lkZV9pKSwgIikiKSkKYGBgCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIGNhcGFjaXRpZXMgZm9yIHNlbGYtIGFuZCBvdGhlci1yZWxldmFudCBlbW90aW9uc+KAlGEgc3VpdGUgb2YgY2FwYWNpdGllcyB0aGF0IHdlIChmb2xsb3dpbmcgV2Vpc21hbiBldCBhbC4pIHdpbGwgcmVmZXIgdG8gYXMgX0hFQVJUXy4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV8zX2QxX2FkLCA0LCAiRjEiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfM19kMV9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMSJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLgoKVGhlIHNlY29uZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgcmVsYXRlZCB0byBiaW9sb2dpY2FsIG5lZWRz4oCUYSBzdWl0ZSBvZiBjYXBhY2l0aWVzIHRoYXQgd2UgKGZvbGxvd2luZyBXZWlzbWFuIGV0IGFsLikgd2lsbCByZWZlciB0byBhcyBfQk9EWV8uIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfM19kMV9hZCwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhXzNfZDFfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIHRvIGRldGVjdCBhbmQgdXNlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlbnZpcm9ubWVudOKAlGEgc3VpdGUgb2YgY2FwYWNpdGllcyB0aGF0IHdlIChmb2xsb3dpbmcgV2Vpc21hbiBldCBhbC4pIHdpbGwgcmVmZXIgdG8gYXMgX01JTkRfLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhXzNfZDFfYWQsIDQsICJGMyIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV8zX2QxX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uICAKClNlZSBGaWd1cmUgMSBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncy4gKE5vdGUgdGhhdCBmb3IgdGhlIHNha2Ugb2YgY29uc2lzdGVuY3kgYWNyb3NzIHN0dWRpZXMgYW5kIGNvbXBhcmlzb24gd2l0aCBXZWlzbWFuIGV0IGFsLidzIHdvcmssIHdlIGhhdmUgcGxvdHRlZCB0aGVzZSBmYWN0b3JzIGluIHRoZSBzYW1lIG9yZGVyIGZvciBhbGwgc3R1ZGllczogX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfLikKCkluIHN1bSwgYXMgV2Vpc21hbiBldCBhbC4ncyBvcmlnaW5hbCBzdHVkaWVzLCBhIHRocmVlLWZhY3RvciBzdHJ1Y3R1cmUgZW1lcmdlZCBmcm9tIGFkdWx0cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucywgY2hhcmFjdGVyaXplZCBieSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gYm9keSwgaGVhcnQsIGFuZCBtaW5kLiBUaGlzIHN1Z2dlc3RzIHRoYXQgb3VyIGNoaWxkLWZyaWVuZGx5IHBhcmFkaWdtIHdhcyB2YWxpZDogVXNpbmcgcmV3b3JkZWQgaXRlbXMgYW5kIGEgdGhyZWUtcG9pbnQgcmVzcG9uc2Ugc2NhbGUgZWxpY2l0ZWQgdGhlIHNhbWUgaW50dWl0aXZlIG9udG9sb2d5IG9mIG1lbnRhbCBsaWZlLCBhbW9uZyBhZHVsdHMsIHRoYXQgaGFzIGJlZW4gcmV2ZWFsZWQgYnkgbW9yZSBjb21wbGV4LCAiYWR1bHQtZnJpZW5kbHkiIGV4cGVyaW1lbnRhbCBwYXJhZGlnbXMuIAoKIyMjIENvbmNlcHR1YWwgc3RydWN0dXJlOiBDaGlsZHJlbiAoNy05eSkKCmBgYHtyfQojIGltcGxlbWVudCAzIGZhY3RvciByZXRlbnRpb24gcHJvdG9jb2xzCm5mYWN0X3Bhcl9kMV83OSA8LSBmYS5wYXJhbGxlbChkMV83OV93aWRlX2ksIGNvciA9IGNob3Nlbl9jb3IsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0gPSBjaG9zZW5fZm0pJG5mYWN0Cm5mYWN0X2JpY19kMV83OSA8LSB2c3MoZDFfNzlfd2lkZV9pLCBjb3IgPSBjaG9zZW5fY29yLCByb3RhdGUgPSBjaG9zZW5fcm90LCAKICAgICAgICAgICAgICAgICAgICAgICBmbSA9IGNob3Nlbl9mbSkkdnNzLnN0YXRzJEJJQyAlPiUgd2hpY2gubWluKCkKbmZhY3Rfd2RtX2QxXzc5IDwtIHJldGVuX2Z1bihkMV83OV93aWRlX2ksIHJvdF90eXBlID0gY2hvc2VuX3JvdCkKCmNhdCgiUGFyYWxsZWwgYW5hbHlzaXM6ICIsIG5mYWN0X3Bhcl9kMV83OSwKICAgICJcbk1pbmltaXppbmcgQklDOiAiLCBuZmFjdF9iaWNfZDFfNzksCiAgICAiXG5XZWlzbWFuIGV0IGFsLjogIiwgbmZhY3Rfd2RtX2QxXzc5KQpgYGAKCk91ciB0aHJlZSBtZXRob2RzIGZvciBkZXRlcm1pbmluZyBob3cgbWFueSBmYWN0b3JzIHRvIHJldGFpbiBhbGwgc3VnZ2VzdGVkIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzLgoKYGBge3J9CmVmYV8zX2QxXzc5IDwtIGZhX2Z1bihkMV83OV93aWRlX2ksIDMpCgplZmFfM19wbG90X2QxXzc5IDwtIGhlYXRtYXBfZnVuKGVmYV8zX2QxXzc5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBjKCJIRUFSVCIsICJCT0RZIiwgIk1JTkQiKSkgKwogIGxhYnModGl0bGUgPSBwYXN0ZTAoIkNoaWxkcmVuIDctOXkgKG49IiwgbnJvdyhkMV83OV93aWRlX2kpLCAiKSIpKSArCiAgZ3VpZGVzKGZpbGwgPSAibm9uZSIpCmBgYAoKYGBge3J9CmNvbmdfZWZhXzNfZDFfYWRfNzkgPC0gZmEuY29uZ3J1ZW5jZShlZmFfM19kMV83OSRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV8zX2QxX2FkJGxvYWRpbmdzKQpgYGAKCkFmdGVyIHJvdGF0aW9uLCB0aGUgZmlyc3QgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGNvbmZpcm1lZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBfSEVBUlRfIGZhY3RvciAoY29zaW5lIHNpbWlsYXJpdHkgd2l0aCBfSEVBUlRfOiBgciBjb25nX2VmYV8zX2QxX2FkXzc5WyJGMSIsICJGMSJdYDsgd2l0aCBfQk9EWV86IGByIGNvbmdfZWZhXzNfZDFfYWRfNzlbIkYxIiwgIkYyIl1gOyB3aXRoIF9NSU5EXzogYHIgY29uZ19lZmFfM19kMV9hZF83OVsiRjEiLCAiRjMiXWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhXzNfZDFfNzksIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV8zX2QxXzc5JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uIAoKVGhlIHNlY29uZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGNvbmZpcm1lZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBfQk9EWV8gZmFjdG9yIChjb3NpbmUgc2ltaWxhcml0eSB3aXRoIF9CT0RZXzogYHIgY29uZ19lZmFfM19kMV9hZF83OVsiRjIiLCAiRjIiXWA7IHdpdGggX0hFQVJUXzogYHIgY29uZ19lZmFfM19kMV9hZF83OVsiRjIiLCAiRjEiXWA7IHdpdGggX01JTkRfOiBgciBjb25nX2VmYV8zX2QxX2FkXzc5WyJGMiIsICJGMyJdYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfM19kMV83OSwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhXzNfZDFfNzkkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgX01JTkRfIGZhY3RvciAoY29zaW5lIHNpbWlsYXJpdHkgd2l0aCBfTUlORF86IGByIGNvbmdfZWZhXzNfZDFfYWRfNzlbIkYzIiwgIkYzIl1gOyB3aXRoIF9IRUFSVF86IGByIGNvbmdfZWZhXzNfZDFfYWRfNzlbIkYzIiwgIkYxIl1gOyB3aXRoIF9CT0RZXzogYHIgY29uZ19lZmFfM19kMV9hZF83OVsiRjMiLCAiRjIiXWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhXzNfZDFfNzksIDQsICJGMyIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV8zX2QxXzc5JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uIChTZWUgRmlndXJlIDEgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MuKQoKSW4gc3VtLCBsaWtlIGFkdWx0cywgY2hpbGRyZW4ncyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIHdlcmUgZG9taW5hdGVkIGJ5IGEgdGhyZWUtd2F5IGRpc3RpbmN0aW9uIGJldHdlZW4gcGh5c2lvbG9naWNhbCwgc29jaWFsLWVtb3Rpb25hbCwgYW5kIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllc+KAlGkuZS4sIGJvZHksIGhlYXJ0LCBhbmQgbWluZC4KCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNjd9CmZpZzAxX3Bsb3RzIDwtIHBsb3RfZ3JpZChlZmFfM19wbG90X2QxXzc5LCBlZmFfM19wbG90X2QxX2FkLAogICAgICAgICAgICAgICAgICAgICAgICAgcmVsX3dpZHRocyA9IGMoMC44NSwgMSksIGxhYmVscyA9IGMoIkEiLCAiQiIpKQpmaWcwMV93aXRoX2NhcHRpb24gPC0gYWRkX3N1YihmaWcwMV9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSAxOiBFeHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMgcmVzdWx0cyBmb3IgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiAoQSkgYW5kIGFkdWx0cyAoQikgaW4gU3R1ZHkgMSwgaW4gd2hpY2ggZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCA0MCBtZW50YWwgY2FwYWNpdGllcyBmb3Igb25lIG9mIHR3byB0YXJnZXQgY2hhcmFjdGVyczogYSBiZWV0bGUgb3IgYSByb2JvdC4iLCAxNDMpLCB4ID0gMCwgaGp1c3QgPSAwKQpnZ2RyYXcoZmlnMDFfd2l0aF9jYXB0aW9uKQpgYGAKCiMjIyBBdHRyaWJ1dGlvbnMgb2YgbWVudGFsIGxpZmUKClRoZSBmYWN0b3IgYW5hbHlzZXMgb2YgY29ycmVsYXRpb25zIGFtb25nIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMganVzdCBkZXNjcmliZWQgc2hlZCBsaWdodCBvbiBvbmUgYXNwZWN0IG9mIGNoaWxkcmVuJ3MgY29uY2VwdHMgb2YgbWVudGFsIGxpZmU6IGl0cyBvbnRvbG9naWNhbCBzdHJ1Y3R1cmUuIFRoZSBkZXNpZ24gb2Ygb3VyIHN0dWR5IGFsc28gYWxsb3dzIHVzIHRvIGxvb2sgYXQgYSBzZWNvbmQgYXNwZWN0IG9mIGNvbmNlcHR1YWwgZGV2ZWxvcG1lbnQgaW4gdGhpcyBkb21haW46IGNoaWxkcmVuJ3MgYXBwbGljYXRpb24gb2YgdGhpcyBjb25jZXB0LCBpLmUuLCB3aGljaCBtZW50YWwgY2FwYWNpdGllcyB0aGV5IHRlbmQgdG8gYXR0cmlidXRlIG9yIG5vdCB0byBhdHRyaWJ1dGUgdG8gdGhlIGRpZmZlcmVudCB0YXJnZXQgY2hhcmFjdGVycy4gSG93IG1pZ2h0IGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNhcGFjaXRpZXMgcmVsYXRlZCB0byBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gdmFyeSBhY3Jvc3MgbWlkZGxlIGNoaWxkaG9vZCAoNy05eSksIGFuZCBob3cgZG8gdGhleSBjb21wYXJlIHRvIHRoZSBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIG9mIGFkdWx0cz8KCiMjIyMgRGlmZmVyZW5jZXMgYWNyb3NzIGFnZSBncm91cHMKCmBgYHtyfQpkMV9hbGxfd2lkZV9pIDwtIGQxX2FkX3dpZGVfaSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkX2NoYXIiKSAlPiUKICBmdWxsX2pvaW4oZDFfNzlfd2lkZV9pICU+JQogICAgICAgICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWRfY2hhciIpKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoInN1YmlkX2NoYXIiKQpgYGAKCmBgYHtyfQplZmFfM19kMV83OV9wcm9qZWN0X3Njb3JlcyA8LSBwcmVkaWN0KG9iamVjdCA9IGVmYV8zX2QxX2FkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkMV83OV93aWRlX2ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkLmRhdGEgPSBkMV9hZF93aWRlX2kpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkX2NoYXIiKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBnc3ViKCJfLiokIiwgIiIsIHN1YmlkX2NoYXIpLAogICAgICAgICBjaGFyYWN0ZXIgPSBnc3ViKCJeLipfIiwgIiIsIHN1YmlkX2NoYXIpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgLWMoc3ViaWQsIGNoYXJhY3Rlciwgc3ViaWRfY2hhcikpICU+JQogIG11dGF0ZShmYWN0b3JfbmFtZSA9IHJlY29kZV9mYWN0b3IoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkYyIiA9ICJCT0RZIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMSIgPSAiSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkYzIiA9ICJNSU5EIikpICU+JQogIGFycmFuZ2Uoc3ViaWRfY2hhcikKYGBgCgpUbyBjb21wYXJlIGNoaWxkcmVuJ3MgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyB0byB0aG9zZSBvZiBhZHVsdHMsIHdlIHByb2plY3RlZCBjaGlsZHJlbidzIHJlc3BvbnNlcyBpbnRvIHRoZSBmYWN0b3Igc3BhY2UgZGVmaW5lZCBieSBhZHVsdHMgKHN0YW5kYXJkaXplZCBpbiB0ZXJtcyBvZiBhZHVsdHMnIHJlc3BvbnNlcyksIGFuZCBleGFtaW5lZCBmYWN0b3Igc2NvcmVzIGJ5IGFnZSBncm91cCAodXNpbmcgdGhlIGNvcnJlbGF0aW9uLXByZXNlcnZpbmcgbWV0aG9kIGFydGljdWxhdGVkIGJ5IHRlbiBCZXJnZSwgS3Jpam5lbiwgV2Fuc2JlZWssICYgU2hhcGlybywgMTk5OSwgYXMgaW1wbGVtZW50ZWQgaW4gdGhlICJwc3ljaCIgcGFja2FnZSBmb3IgUiwgUmV2ZWxsZSwgMjAxOCkuIFRoaXMgeWllbGRlZCB0aHJlZSBzY29yZXMgZm9yIGVhY2ggcGFydGljaXBhbnQsIGNvcnJlc3BvbmRpbmcsIGluIHByaW5jaXBsZSwgdG8gaG9saXN0aWMganVkZ21lbnRzIG9mIHRoZSBzb2NpYWwtZW1vdGlvbmFsLCBwaHlzaW9sb2dpY2FsLCBhbmQgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIG9mIHRoZSB0YXJnZXQgY2hhcmFjdGVyIHRoZSBwYXJ0aWNpcGFudCBldmFsdWF0ZWQuIChOb3RlIHRoYXQgZWFjaCBvZiB0aGVzZSB0aHJlZSBzY29yZXMgdGFrZXMgaW50byBhY2NvdW50IGZhY3RvciBsb2FkaW5ncyBmb3IgYWxsIDQwIG1lbnRhbCBjYXBhY2l0aWVzLCBhcyBzaG93biBpbiBGaWd1cmUgMS4pIAoKVGhpcyBhbGxvd2VkIHVzIHRvIGV4YW1pbmUgdGhlIGVmZmVjdHMgb2YgYWdlIGdyb3VwIChhZHVsdCwgY2hpbGQpLCBjaGFyYWN0ZXIgKGJlZXRsZSwgcm9ib3QpLCBhbmQgZmFjdG9yIChfQk9EWV8sIF9IRUFSVF8sIF9NSU5EXykgb24gdGhlc2Ugc2NvcmVzIHZpYSBtaXhlZCBlZmZlY3RzIEJheWVzaWFuIHJlZ3Jlc3Npb24uIFNlZSBUYWJsZSAxIGZvciB0aGUgcmVzdWx0cyBvZiBhIG1heGltYWwgbW9kZWwgYW5kIEZpZ3VyZSA0IGZvciBzY29yZXMgYnkgYWdlIGdyb3VwLCBhZ2UgKGZvciBjaGlsZHJlbiksIGZhY3RvciwgYW5kIGNoYXJhY3Rlci4gCgpgYGB7cn0KZWZhXzNfc2NvcmVzX2QxX2FsbCA8LSBlZmFfM19kMV9hZCRzY29yZXMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWRfY2hhciIpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCAtc3ViaWRfY2hhcikgJT4lCiAgbXV0YXRlKHN1YmlkID0gZ3N1YigiX2JlZXRsZSIsICIiLCBzdWJpZF9jaGFyKSwKICAgICAgICAgc3ViaWQgPSBnc3ViKCJfcm9ib3QiLCAiIiwgc3ViaWQpLAogICAgICAgICBjaGFyYWN0ZXIgPSBnc3ViKCJeLipfIiwgIiIsIHN1YmlkX2NoYXIpLAogICAgICAgICBhZ2VfZ3JvdXAgPSAiYWR1bHRzIiwKICAgICAgICAgZmFjdG9yX25hbWUgPSByZWNvZGVfZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMiIgPSAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRjEiID0gIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMyIgPSAiTUlORCIpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBmdWxsX2pvaW4oZWZhXzNfZDFfNzlfcHJvamVjdF9zY29yZXMgJT4lIAogICAgICAgICAgICAgIGxlZnRfam9pbihkMV83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZV9ncm91cCwgYWdlKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJmYWN0b3IiKSwgY2hhcmFjdGVyLCBhZ2VfZ3JvdXApLCBmdW5zKGZhY3RvcikpCgplZmFfM19zY29yZXNfYm9vdF9kMV9hbGwgPC0gZWZhXzNfc2NvcmVzX2QxX2FsbCAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGZhY3RvciwgZmFjdG9yX25hbWUsIGNoYXJhY3RlcikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KY29udHJhc3RzKGVmYV8zX3Njb3Jlc19kMV9hbGwkY2hhcmFjdGVyKSA8LSBjYmluZCgiUl9HTSIgPSBjKC0xLCAxKSkKY29udHJhc3RzKGVmYV8zX3Njb3Jlc19kMV9hbGwkYWdlX2dyb3VwKSA8LSBjYmluZCgiQ0g3OV9BRCIgPSBjKDAsIDEpKQpjb250cmFzdHMoZWZhXzNfc2NvcmVzX2QxX2FsbCRmYWN0b3JfbmFtZSkgPC0gY2JpbmQoIkhfR00iID0gYygtMSwgMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTV9HTSIgPSBjKC0xLCAwLCAxKSkKCiMgZWZhXzNfc2NvcmVzX3JfZDFfYWxsIDwtIGJybShzY29yZSB+IGZhY3Rvcl9uYW1lICogYWdlX2dyb3VwICogY2hhcmFjdGVyCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICgxfHN1YmlkKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBlZmFfM19zY29yZXNfZDFfYWxsLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZCA9IDEyMzQ1LAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyBzYXZlUkRTKGVmYV8zX3Njb3Jlc19yX2QxX2FsbCwgZmlsZSA9ICIuL2JybXNfbW9kZWxzL2VmYV8zX3Njb3Jlc19yX2QxX2FsbC5yZHMiKQoKZWZhXzNfc2NvcmVzX3JfZDFfYWxsIDwtIHJlYWRSRFMoIi4vYnJtc19tb2RlbHMvZWZhXzNfc2NvcmVzX3JfZDFfYWxsLnJkcyIpCiMgc3VtbWFyeShlZmFfM19zY29yZXNfcl9kMV9hbGwpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCByZXN1bHRzID0gImFzaXMifQpmaXhlZihlZmFfM19zY29yZXNfcl9kMV9hbGwpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oIlBhcmFtZXRlciIpICU+JQogIG11dGF0ZShQYXJhbWV0ZXIgPSByZWNvZGVfZmFjdG9yKFBhcmFtZXRlciwKICAgICJJbnRlcmNlcHQiID0gIihJbnRlcmNlcHQpIiwKICAgICJjaGFyYWN0ZXJSX0dNIiA9ICJjaGFyYWN0ZXIgKHJvYm90IHZzLiBncmFuZCBtZWFuKSIsCiAgICAiZmFjdG9yX25hbWVIX0dNIiA9ICJIRUFSVCAodnMuIGdyYW5kIG1lYW4pIiwKICAgICJmYWN0b3JfbmFtZU1fR00iID0gIk1JTkQgKHZzLiBncmFuZCBtZWFuKSIsCiAgICAiZmFjdG9yX25hbWVIX0dNOmNoYXJhY3RlclJfR00iID0gImNoYXJhY3RlciDDlyBIRUFSVCIsCiAgICAiZmFjdG9yX25hbWVNX0dNOmNoYXJhY3RlclJfR00iID0gImNoYXJhY3RlciDDlyBNSU5EIiwKICAgICJhZ2VfZ3JvdXBDSDc5X0FEIiA9ICJhZ2UgZ3JvdXAgKGNoaWxkcmVuIHZzLiBhZHVsdHMpIiwKICAgICJhZ2VfZ3JvdXBDSDc5X0FEOmNoYXJhY3RlclJfR00iID0gImNoYXJhY3RlciDDlyBhZ2UgZ3JvdXAiLAogICAgImZhY3Rvcl9uYW1lSF9HTTphZ2VfZ3JvdXBDSDc5X0FEIiA9ICJIRUFSVCDDlyBhZ2UgZ3JvdXAiLAogICAgImZhY3Rvcl9uYW1lTV9HTTphZ2VfZ3JvdXBDSDc5X0FEIiA9ICJNSU5EIMOXIGFnZSBncm91cCIsCiAgICAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVyUl9HTSIgPSAiY2hhcmFjdGVyIMOXIEhFQVJUIMOXIGFnZSBncm91cCIsCiAgICAiZmFjdG9yX25hbWVNX0dNOmFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVyUl9HTSIgPSAiY2hhcmFjdGVyIMOXIE1JTkQgw5cgYWdlIGdyb3VwIikpICU+JQogIGFycmFuZ2UoUGFyYW1ldGVyKSAlPiUKICBtdXRhdGUoWCA9IGlmZWxzZShRMi41ICogUTk3LjUgPiAwLCAiKiIsICIiKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLVBhcmFtZXRlciwgLVgpLAogICAgICAgICAgICBmdW5zKGZvcm1hdChyb3VuZCguLCAyKSwgbnNtYWxsID0gMikpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBFcnJvciA9IEVzdC5FcnJvciwgIiAiID0gWCkgJT4lCiAgdW5pdGUoYDk1JSBDSWAsIFEyLjUsIFE5Ny41LCBzZXAgPSAiLCAiKSAlPiUKICBtdXRhdGUoYDk1JSBDSWAgPSBwYXN0ZTAoIlsiLCBgOTUlIENJYCwgIl0iKSkgJT4lCiAga25pdHI6OmthYmxlKGZvcm1hdCA9ICJodG1sIiwgYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgMykpLAogICAgICAgICAgICAgICBjYXB0aW9uID0gIlRhYmxlIDE6IEZpeGVkIGVmZmVjdHMgZnJvbSBhIG1peGVkLWVmZmVjdHMgQmF5ZXNpYW4gcmVncmVzc2lvbiBtb2RlbCBwcmVkaWN0aW5nIGZhY3RvciBzY29yZXMgaW4gU3R1ZHkgMSBieSBjaGFyYWN0ZXIgKGJlZXRsZSwgcm9ib3QpLCBmYWN0b3IgKEJPRFksIEhFQVJULCBNSU5EKSwgYW5kIGFnZSBncm91cCAoYWR1bHRzLCBjaGlsZHJlbikuIFRoZSBtb2RlbCB1c2VkIHRoZSBmb3JtdWxhICdmYWN0b3Igc2NvcmUgfiBmYWN0b3IgKiBhZ2UgZ3JvdXAgKiBjaGFyYWN0ZXIgKyAoMSB8IHN1YmplY3QpJyBhbmQgd2FzIGltcGxlbWVudGVkIGluIHRoZSAnYnJtcycgcGFja2FnZSBmb3IgUiAoQsO8cmtuZXIsIDIwMTcpLiBGYWN0b3IgYW5kIGNoYXJhY3RlciB3ZXJlIGVmZmVjdC1jb2RlZDsgYWdlIGdyb3VwIHdhcyBkdW1teS1jb2RlZCB3aXRoIGFkdWx0cyBhcyB0aGUgYmFzZWxpbmUuIEFzdGVyaXNrcyBtYXJrIHBhcmFtZXRlcnMgd2hvc2UgOTUlIGNyZWRpYmxlIGludGVydmFsIGRvZXMgbm90IGluY2x1ZGUgMC4iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiQWR1bHRzIiwgMSwgNikgJT4lCiAgZ3JvdXBfcm93cygiNy05eSB2cy4gYWR1bHRzIiwgNywgMTIpCmBgYAoKQ29sbGFwc2luZyBhY3Jvc3MgZmFjdG9ycywgZmFjdG9yIHNjb3JlcyBzdWdnZXN0IHRoYXQgYWR1bHRzIGdlbmVyYWxseSBhdHRyaWJ1dGVkIGZld2VyIG1lbnRhbCBjYXBhY2l0aWVzIHRvIHRoZSByb2JvdCB0aGFuIHRoZSBiZWV0bGUgKGByIHdyaXRlX2JfOTVDSV9mdW4oZWZhXzNfc2NvcmVzX3JfZDFfYWxsLCAiY2hhcmFjdGVyUl9HTSIpYCkuIEhvd2V2ZXIsIHRoaXMgYXBwZWFycyB0byBiZSBlbnRpcmVseSBkdWUgdG8gdGhlIGh1Z2UgZGlzY3JlcGFuY3kgYmV0d2VlbiBjaGFyYWN0ZXJzIGluIHRoZSBfQk9EWV8gZG9tYWluOyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGNoYXJhY3RlcnMgd2FzIHJlZHVjZWQgdG8gbm90aGluZyBpbiB0aGUgX0hFQVJUXyBkb21haW4gKGByIHdyaXRlX2JfOTVDSV9mdW4oZWZhXzNfc2NvcmVzX3JfZDFfYWxsLCAiZmFjdG9yX25hbWVIX0dNOmNoYXJhY3RlclJfR00iKWApLCBhbmQgcmV2ZXJzZWQgaW4gdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGRvbWFpbiAoYHIgd3JpdGVfYl85NUNJX2Z1bihlZmFfM19zY29yZXNfcl9kMV9hbGwsICJmYWN0b3JfbmFtZU1fR006Y2hhcmFjdGVyUl9HTSIpYCkuIAoKTWVhbndoaWxlLCBjaGlsZHJlbiBjaGlsZHJlbiB0ZW5kZWQgdG8gYXR0cmlidXRlIG1vcmUgbWVudGFsIGNhcGFjaXRpZXMsIGNvbGxhcHNpbmcgYWNyb3NzIGNoYXJhY3RlcnMsIHRoYW4gZGlkIGFkdWx0cyAoYHIgd3JpdGVfYl85NUNJX2Z1bihlZmFfM19zY29yZXNfcl9kMV9hbGwsICJhZ2VfZ3JvdXBDSDc5X0FEIilgKSAtIGJ1dCB0aGlzIHdhcyBkcml2ZW4gcHJpbWFyaWx5IGJ5IHRoZSBzb2NpYWwtZW1vdGlvbmFsIGRvbWFpbiAoYHIgd3JpdGVfYl85NUNJX2Z1bihlZmFfM19zY29yZXNfcl9kMV9hbGwsICJmYWN0b3JfbmFtZUhfR006YWdlX2dyb3VwQ0g3OV9BRCIpYCksIGFuZCB3YXMgcmV2ZXJzZWQgaW4gdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGRvbWFpbiAoYHIgd3JpdGVfYl85NUNJX2Z1bihlZmFfM19zY29yZXNfcl9kMV9hbGwsICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g3OV9BRCIpYCkuIAoKYGBge3IsIGZpZy53aWR0aCA9IDIsIGZpZy5hc3AgPSAzfQpmaWcwMl9wbG90IDwtIGdncGxvdChlZmFfM19zY29yZXNfYm9vdF9kMV9hbGwgJT4lCiAgICAgICAgIG11dGF0ZShhZ2VfZ3JvdXAgPSByZWNvZGVfZmFjdG9yKGFnZV9ncm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuNzkiID0gIjctOXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWR1bHRzIiA9ICJhZHVsdHMiKSksCiAgICAgICBhZXMoeCA9IGFnZV9ncm91cCwgeSA9IG1lYW4sIGNvbG9yID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoZmFjdG9yX25hbWUpLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAyKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGNoYXJhY3RlciksIAogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSkgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMCwgMTAsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdyA9IDIsIGJ5cm93ID0gVCwgcmV2ZXJzZSA9IEYpKSArCiAgbGFicyh4ID0gImFnZSBncm91cCIsIHkgPSAiIiwgY29sb3IgPSAiY2hhcmFjdGVyIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAzfQpmaWcwMl93aXRoX2NhcHRpb24gPC0gYWRkX3N1YihmaWcwMl9wbG90LCBzdHJfd3JhcCgiRmlndXJlIDI6IEZhY3RvciBzY29yZXMgZm9yIGFkdWx0cyBhbmQgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAxLCBpbiB3aGljaCBlYWNoIHBhcnRpY2lwYW50IGFzc2Vzc2VkIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciBvbmUgb2YgdHdvIHRhcmdldCBjaGFyYWN0ZXJzOiBhIGJlZXRsZSAocGluayBjaXJjbGVzKSBvciBhIHJvYm90IChibHVlIHNxdWFyZXMpLiBFYWNoIHBhcnRpY2lwYW50IHJlY2lldmVkIGEgZmFjdG9yIHNjb3JlIGZvciBlYWNoIGZhY3RvciAoQk9EWSwgSEVBUlQsIGFuZCBNSU5ELCBhcyBkZWZpbmVkIGJ5IGFuIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyBvZiBhZHVsdHMnIHJlc3BvbnNlcykuIFdlIHRyZWF0ZWQgdGhlc2Ugc2NvcmVzIGFzIHN1bW1hcmllcyBvZiB0aGF0IHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBpbiB0aGVzZSBkb21haW5zOyBhIHNjb3JlIG9mIDAgY29ycmVzcG9uZHMgdG8gdGhlIG1lYW4gZm9yIHRoYXQgZmFjdG9yIGFtb25nIGFkdWx0cy4gRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscy4gTm90ZSB0aGF0IHRoZSByYW5nZSBvZiB0aGUgeS1heGlzIGRpZmZlcnMgYWNyb3NzIHBhbmVscy4iLCA2MiksIHggPSAwLCBoanVzdCA9IDApCmdnZHJhdyhmaWcwMl93aXRoX2NhcHRpb24pCmBgYAoKQSB2aXN1YWwgaW5zcGVjdGlvbiBvZiBGaWd1cmUgMiBjbGFyaWZpZXMgdGhlc2UgZmluZGluZ3MuIEF0dHJpYnV0aW9ucyBpbiB0aGUgX0JPRFlfIGFuZCBfTUlORF8gZG9tYWlucyB3ZXJlIHJhdGhlciBzaW1pbGFyIGZvciBjaGlsZHJlbiBhbmQgYWR1bHRzOiBCb3RoIGNoaWxkcmVuIGFuZCBhZHVsdHMgbWFya2VkIGEgY2xlYXIgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByb2JvdCBhbmQgdGhlIGJlZXRsZSBpbiB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIG9mIHRoZSBfQk9EWV8gKHRvcCByb3cpLCBpbiBsaW5lIHdpdGggdGhlIGFuaW1hdGXigJNpbmFuaW1hdGUgZGlzdGluY3Rpb247IGFuZCBib3RoIGFnZSBncm91cHMgY3JlZGl0ZWQgdGhlIHJvYm90IHdpdGggc2xpZ2h0bHkgZ3JlYXRlciBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBza2lsbHMgKF9NSU5EXykgdGhhbiB0aGUgYmVldGxlIChib3R0b20gcm93KS4gSW4gY29udHJhc3QsIGluIHRoZSBfSEVBUlRfIGRvbWFpbiAobWlkZGxlIHJvdykgYm90aCB0aGUgYmVldGxlIGFuZCB0aGUgcm9ib3QgcmVjZWl2ZWQgcmF0aGVyIGxvdyBzY29yZXMgYW1vbmcgYWR1bHRzLCBidXQgdmVyeSBoaWdoIHNjb3JlcyBhbW9uZyBjaGlsZHJlbi4KClRoZSByYXcgZGF0YSBmdXJ0aGVyIHN1cHBvcnN0IHRoZXNlIG9ic2VydmF0aW9uczsgc2VlIEZpZ3VyZSAzIGZvciByYXcgY291bnRzIG9mIF9ub18sIF9raW5kYV8sIGFuZCBfeWVzXyByZXNwb25zZXMgZm9yIGFsbCBpdGVtcywgZ3JvdXBlZCBieSBmYWN0b3IsIGNoYXJhY3RlciwgYW5kIGFnZSBncm91cC4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGh1bmdlciAodGhlIGZpcnN0IGNhcGFjaXR5IHVuZGVyIF9CT0RZXyk6IEFjcm9zcyBhZ2UgZ3JvdXBzLCBuZWFybHkgZXZlcnkgcGFydGljaXBhbnQgc2FpZCB0aGF0IGEgYmVldGxlIGNvdWxkIGdldCBodW5ncnksIHdoaWxlIGZldyBwYXJ0aWNpcGFudHMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBzb21lIGNoaWxkcmVuKSBzYWlkIHRoYXQgYSByb2JvdCBjb3VsZC4gTGlrZXdpc2UsIGZvciBtYXRoZW1hdGljYWwgY29tcHV0YXRpb25zICh0aGUgbGFzdCBjYXBhY2l0eSB1bmRlciBfTUlORF8pLCB2aXJ0dWFsbHkgbm8gcGFydGljaXBhbnRzIHNhaWQgdGhhdCBhIGJlZXRsZSB3YXMgY2FwYWJsZSBvZiBkb2luZyBtYXRoLCB3aGlsZSB0aGUgdmFzdCBtYWpvcml0eSBvZiBib3RoIGFkdWx0cyBhbmQgY2hpbGRyZW4gc2FpZCB0aGF0IGEgcm9ib3Qgd2FzLiBCdXQgZm9yIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzLCBsaWtlIGZlZWxpbmcgcHJvdWQsIGZlZWxpbmcgam95LCBhbmQgZmVlbGluZyBzYWQgKHRoZSBmaXJzdCB0aHJlZSBjYXBhY2l0aWVzIHVuZGVyIF9IRUFSVF8pLCBmYXIgbW9yZSBjaGlsZHJlbiB0aGFuIGFkdWx0cyBlbmRvcnNlZCB0aGVzZSBjYXBhY2l0aWVzIGZvciBiZWV0bGVzIGFuZCByb2JvdHMuIChTZWUgU09NIGZvciBhbiBhbmFseXNpcywgcGFyYWxsZWwgdG8gdGhlIHJlZ3Jlc3Npb24gYW5hbHlzZXMgaGVyZSwgb2YgdGhlIHByb3BvcnRpb24gb2YgdGhlIHRvcC1sb2FkaW5nIG1lbnRhbCBjYXBhY2l0aWVzIGZvciBlYWNoIGZhY3RvciB0aGF0IHdlcmUgZW5kb3JzZWQgYnkgcGFydGljaXBhbnRzIG9mIGRpZmZlcmVudCBhZ2VzLikKCmBgYHtyfQpkMV9hbGwgPC0gZDFfYWQgJT4lCiAgZnVsbF9qb2luKGQxXzc5KSAlPiUKICBzZWxlY3QoYWdlX2dyb3VwLCBzdWJpZCwgY2hhcmFjdGVyLCBjYXBhY2l0eSwgcmVzcG9uc2VfbnVtKSAlPiUKICBsZWZ0X2pvaW4obG9hZGluZ3NfZnVuKGVmYV8zX2QxX2FkKSAlPiUgCiAgICAgICAgICAgICAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogICAgICAgICAgICAgIHRvcF9uKDEsIGxvYWRpbmcpICU+JQogICAgICAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgICAgICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nKSkgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKG9yZGVyID0gMTo0MCkgJT4lCiAgICAgICAgICAgICAgc2VsZWN0KGNhcGFjaXR5LCBmYWN0b3IsIG9yZGVyKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShyZXNwb25zZV9udW0pKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSByZWNvZGVfZmFjdG9yKHJlc3BvbnNlX251bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJubyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMC41IiA9ICJraW5kYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAieWVzIiksCiAgICAgICAgIGZhY3RvciA9IHJlY29kZV9mYWN0b3IoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMiIgPSAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkYxIiA9ICJIRUFSVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkYzIiA9ICJNSU5EIiksCiAgICAgICAgIGFnZV9ncm91cCA9IHJlY29kZV9mYWN0b3IoYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbjc5IiA9ICJjaGlsZHJlbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZHVsdHMiID0gImFkdWx0cyIpKQpgYGAKCmBgYHtyfQpmaWcwM19mdW4gPC0gZnVuY3Rpb24od2hpY2hmYWMpewogIGZpZyA8LSBkMV9hbGwgJT4lCiAgICBmaWx0ZXIoZmFjdG9yID09IHdoaWNoZmFjKSAlPiUKICAgIG11dGF0ZShhZ2VfZ3JvdXAgPSByZWNvZGVfZmFjdG9yKGFnZV9ncm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiIgPSAiNy05eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWR1bHRzIiA9ICJhZHVsdHMiKSkgJT4lCiAgICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKGNhcGFjaXR5LCBvcmRlciksCiAgICAgICAgICAgICAgIGZpbGwgPSBjaGFyYWN0ZXIsIGFscGhhID0gcmVzcG9uc2UpKSArCiAgICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKGNoYXJhY3RlciksIHJvd3MgPSB2YXJzKGFnZV9ncm91cCksCiAgICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICAgIGdlb21fYmFyKHBvc2l0aW9uID0gInN0YWNrIikgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogICAgdGhlbWVfYncoKSArCiAgICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogICAgbGFicyh0aXRsZSA9IHdoaWNoZmFjLAogICAgICAgICB4ID0gIm1lbnRhbCBjYXBhY2l0eSAoYnkgZmFjdG9yKSIsCiAgICAgICAgIHkgPSAicHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMiKQogIAogIGlmKHdoaWNoZmFjICE9ICJNSU5EIil7CiAgICBmaWcgPC0gZmlnICsgZ3VpZGVzKGZpbGwgPSAibm9uZSIsIGFscGhhID0gIm5vbmUiKSArIGxhYnMoeCA9ICIiKQogIH0KICAKICByZXR1cm4oZmlnKQp9CgpmaWcwM19CT0RZX3Bsb3QgPC0gZmlnMDNfZnVuKCJCT0RZIikKZmlnMDNfSEVBUlRfcGxvdCA8LSBmaWcwM19mdW4oIkhFQVJUIikKZmlnMDNfTUlORF9wbG90IDwtIGZpZzAzX2Z1bigiTUlORCIpCgpmaWcwM19wbG90cyA8LSBwbG90X2dyaWQoZmlnMDNfQk9EWV9wbG90LCBmaWcwM19IRUFSVF9wbG90LCBmaWcwM19NSU5EX3Bsb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBucm93ID0gMywgcmVsX2hlaWdodHMgPSBjKDEsIDEuMTEsIDEuMTkpLAogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gIkFVVE8iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDN9CmZpZzAzX3dpdGhfY2FwdGlvbiA8LSBhZGRfc3ViKGZpZzAzX3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDM6IFJhdyBjb3VudHMgb2YgcmVzcG9uc2VzIG9mICd5ZXMnIChkYXJrKSwgJ2tpbmRhJyAobWVkaXVtKSwgb3IgJ25vJyAobGlnaHQpIGZvciBhbGwgbWVudGFsIGNhcGFjaXR5IGl0ZW1zLCBncm91cGVkIGJ5IHRoZSBmYWN0b3Igb24gd2hpY2ggdGhleSBsb2FkaW5nIG1vc3QgcG9zaXRpdmVseSAoQk9EWSwgSEVBUlQsIE1JTkQpIGFjY29yZGluZyB0byBhbiBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMgb2YgYWR1bHRzJyByZXNwb25zZXMgKFN0dWR5IDEpLiBFYWNoIHBhcnRpY2lwYW50IGFzc2Vzc2VkIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciBvbmUgb2YgdHdvIHRhcmdldCBjaGFyYWN0ZXJzOiBhIGJlZXRsZSAocGluaykgb3IgYSByb2JvdCAoYmx1ZSkuIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyByZXNwb25zZXMgYW5kIGFkdWx0cycgcmVzcG9uc2VzIGFyZSBzaG93biBzZXBhcmF0ZWx5LiIsIDkyKSwgeCA9IDAsIGhqdXN0ID0gMCkKZ2dkcmF3KGZpZzAzX3dpdGhfY2FwdGlvbikKYGBgCgpgYGB7cn0KZDFfYWxsX2VuZG9yc2UgPC0gZDFfYWxsICU+JQogIGdyb3VwX2J5KGZhY3Rvciwgc3ViaWQpICU+JQogIHRvcF9uKC02LCBvcmRlcikgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShlbmRvcnNlID0gaWZlbHNlKHJlc3BvbnNlX251bSA+IDAsIDEsIDApKSAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIsIGZhY3RvcikgJT4lCiAgc3VtbWFyaXNlKHByb3BfZW5kb3JzZSA9IG1lYW4oZW5kb3JzZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbiA9IGxlbmd0aChlbmRvcnNlKSkgJT4lCiAgdW5ncm91cCgpCgpkMV9hbGxfZW5kb3JzZV9ib290IDwtIGQxX2FsbF9lbmRvcnNlICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInByb3BfZW5kb3JzZSIpICU+JQogIHVuZ3JvdXAoKQoKZmlnU1VQUDFfcGxvdCA8LSBkMV9hbGxfZW5kb3JzZSAlPiUKICBmaWx0ZXIoYWdlX2dyb3VwID09ICJjaGlsZHJlbiIpICU+JQogIGxlZnRfam9pbihkMV83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCB5ID0gcHJvcF9lbmRvcnNlLCAKICAgICAgICAgICAgIGZpbGwgPSBjaGFyYWN0ZXIsIGNvbG9yID0gY2hhcmFjdGVyLCBzaGFwZSA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKH4gZmFjdG9yKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjQsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMC4wMykgKwogIGJpbm9taWFsX3Ntb290aChhZXMod2VpZ2h0ID0gbiksIHNob3cubGVnZW5kID0gRikgKwogICMgZ2VvbV9zbW9vdGgobWV0aG9kID0gImdsbSIsCiAgIyAgICAgICAgICAgICBtZXRob2QuYXJncyA9IGxpc3QoZmFtaWx5ID0gImJpbm9taWFsIikpICsKICBnZW9tX3BvaW50KGRhdGEgPSBkMV9hbGxfZW5kb3JzZSAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICBhZXMoeCA9IDExKSwgYWxwaGEgPSAwLjQsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2UoZG9kZ2Uud2lkdGggPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjAzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIud2lkdGggPSAwLjI1KSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZDFfYWxsX2VuZG9yc2VfYm9vdCAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgIGFlcyh4ID0gMTEsIHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gNSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDc6MTEpLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyhwYXN0ZTAoNzoxMCwgInkiKSwgImFkdWx0cyIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAxLzYpLCBsYWJlbHMgPSAwOjYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDIxLCAyMikpICsKICB0aGVtZV9idygpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEsIHNpemUgPSAzKSkpICsKICBsYWJzKHkgPSAibnVtYmVyIG9mIGl0ZW1zIGVuZG9yc2VkIChvdXQgb2YgNikiKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRiwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuN30KZmlnU1VQUDFfd2l0aF9jYXB0aW9uIDwtIGFkZF9zdWIoZmlnU1VQUDFfcGxvdCwgc3RyX3dyYXAoIkZpZ3VyZSBTVVBQMTogTnVtYmVyIG9mIG1lbnRhbCBjYXBhY2l0eSBpdGVtcyAob3V0IG9mIDYpIGVuZG9yc2VkIGluIGVhY2ggZG9tYWluIChCT0RZLCBIRUFSVCwgYW5kIE1JTkQpIGJ5IDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkeSAxLCBpbiB3aGljaCBlYWNoIHBhcnRpY2lwYW50IGFzc2Vzc2VkIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciBvbmUgb2YgdHdvIHRhcmdldCBjaGFyYWN0ZXJzOiBhIGJlZXRsZSAocGluayBjaXJjbGVzKSBvciBhIHJvYm90IChibHVlIHNxdWFyZXMpLiBXZSBkZWZpbmVkIGVhY2ggZG9tYWluIGJ5IHRoZSA2IGl0ZW1zIHRoYXQgbG9hZGVkIHRoZSBtb3N0IHBvc2l0aXZlbHkgb24gdGhlIGNvcnJlc3BvbmRpbmcgZmFjdG9yIGluIGFuIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyBvZiBhZHVsdHMnIHJlc3BvbnNlcywgYW5kIHdlIGNvbnNpZGVyZWQgcmVzcG9uc2VzIG9mIGVpdGhlciAneWVzJyBvciAna2luZGEnIChidXQgbm90ICdubycpIHRvIGJlIGVuZG9yc2VtZW50cy4gTGluZXMgY29ycmVzcG9uZCB0byBsb2dpc3RpYyByZWdyZXNzaW9ucyBjb25zaWRlcmluZyBjaGlsZHJlbidzIHNjb3JlcyBhbG9uZS4gRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyBvbiBhZHVsdHMnIHNjb3Jlcy4iLCAxMzApLCB4ID0gMCwgaGp1c3QgPSAwKQpnZ2RyYXcoZmlnU1VQUDFfd2l0aF9jYXB0aW9uKQpgYGAKCiMjIyMgQWdlIGRpZmZlcmVuY2VzIHdpdGhpbiB0aGUgY2hpbGQgc2FtcGxlCgpPZiBjb3Vyc2UsIG91ciBzYW1wbGUgb2YgImNoaWxkcmVuIiBpbmNsdWRlZCBwYXJ0aWNpcGFudHMgYXMgeW91bmcgYXMgNyB5ZWFycyBhbmQgdXAgdG8gbmVhcmx5IDEwIHllYXJzIG9mIGFnZS4gSG93IGRpZCBhdHRyaWJ1dGlvbnMgdmFyeSBhY3Jvc3MgdGhpcyBhZ2UgcmFuZ2U/IAoKYGBge3J9CmQxX2NoX2FnZSA8LSBkMV83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkKYGBgCgpUbyBleHBsb3JlIGFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGNvbnRpbnVvdXNseSB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZSwgd2UgY29uZHVjdGVkIGFuIGFkZGl0aW9uYWwgcmVncmVzc2lvbiBhbmFseXNpcyBvbiBjaGlsZHJlbidzIGZhY3RvciBzY29yZXMgYWxvbmUsIGluY2x1ZGluZyBpbnRlcmFjdGlvbnMgd2l0aCBleGFjdCBhZ2UgaW4geWVhcnMgKGNlbnRlcmVkIGF0IHRoZSBtZWFuOiBgciBmb3JtYXQocm91bmQobWVhbihkMV9jaF9hZ2UkYWdlLCBuYS5ybSA9IFQpLCAyKSwgbnNtYWxsID0gMilgeSkgcmF0aGVyIHRoYW4gYWdlIGdyb3VwLiBJbiBsaW5lIHdpdGggdGhlIGFnZSBncm91cCBhbmFseXNpcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHRoaXMgY29uZmlybWVkIHRoYXQsIHJlbGF0aXZlIHRvIHRoZSBncmFuZCBtZWFuLCBhdHRyaWJ1dGlvbnMgb2YgX0hFQVJUXyBkZWNyZWFzZWQgd2l0aCBhZ2UgKGByIHdyaXRlX2JfOTVDSV9mdW4oZWZhXzNfc2NvcmVzX3JfZDFfNzksICJmYWN0b3JfbmFtZUhfR006YWdlIilgKSBhbmQgYXR0cmlidXRpb25zIG9mIF9NSU5EXyBpbmNyZWFzZWQgd2l0aCBhZ2UgKGByIHdyaXRlX2JfOTVDSV9mdW4oZWZhXzNfc2NvcmVzX3JfZDFfNzksICJmYWN0b3JfbmFtZU1fR006YWdlIilgKS4gKFNlZSBUYWJsZSAyIGZvciB0aGUgZnVsbCByZXN1bHRzIG9mIHRoaXMgbW9kZWwuKQoKYGBge3J9CiMgZWZhXzNfc2NvcmVzX3JfZDFfNzkgPC0gYnJtKHNjb3JlIH4gZmFjdG9yX25hbWUgKiBhZ2UgKiBjaGFyYWN0ZXIKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoMXxzdWJpZCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBlZmFfM19zY29yZXNfZDFfYWxsICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImNoaWxkcmVuNzkiLCAhaXMubmEoYWdlKSkgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKGFnZSA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWQgPSAxMjM0NSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIHNhdmVSRFMoZWZhXzNfc2NvcmVzX3JfZDFfNzksIGZpbGUgPSAiLi9icm1zX21vZGVscy9lZmFfM19zY29yZXNfcl9kMV83OS5yZHMiKQoKZWZhXzNfc2NvcmVzX3JfZDFfNzkgPC0gcmVhZFJEUygiLi9icm1zX21vZGVscy9lZmFfM19zY29yZXNfcl9kMV83OS5yZHMiKQojIHN1bW1hcnkoZWZhXzNfc2NvcmVzX3JfZDFfNzkpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCByZXN1bHRzID0gImFzaXMifQpmaXhlZihlZmFfM19zY29yZXNfcl9kMV83OSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiUGFyYW1ldGVyIikgJT4lCiAgbXV0YXRlKFBhcmFtZXRlciA9IHJlY29kZV9mYWN0b3IoUGFyYW1ldGVyLAogICAgIkludGVyY2VwdCIgPSAiKEludGVyY2VwdCkiLAogICAgImNoYXJhY3RlclJfR00iID0gImNoYXJhY3RlciAocm9ib3QgdnMuIGdyYW5kIG1lYW4pIiwKICAgICJmYWN0b3JfbmFtZUhfR00iID0gIkhFQVJUICh2cy4gZ3JhbmQgbWVhbikiLAogICAgImZhY3Rvcl9uYW1lTV9HTSIgPSAiTUlORCAodnMuIGdyYW5kIG1lYW4pIiwKICAgICJmYWN0b3JfbmFtZUhfR006Y2hhcmFjdGVyUl9HTSIgPSAiY2hhcmFjdGVyIMOXIEhFQVJUIiwKICAgICJmYWN0b3JfbmFtZU1fR006Y2hhcmFjdGVyUl9HTSIgPSAiY2hhcmFjdGVyIMOXIE1JTkQiLAogICAgImFnZSIgPSAiYWdlIChtZWFuLWNlbnRlcmVkKSIsCiAgICAiYWdlOmNoYXJhY3RlclJfR00iID0gImNoYXJhY3RlciDDlyBhZ2UiLAogICAgImZhY3Rvcl9uYW1lSF9HTTphZ2UiID0gIkhFQVJUIMOXIGFnZSIsCiAgICAiZmFjdG9yX25hbWVNX0dNOmFnZSIgPSAiTUlORCDDlyBhZ2UiLAogICAgImZhY3Rvcl9uYW1lSF9HTTphZ2U6Y2hhcmFjdGVyUl9HTSIgPSAiY2hhcmFjdGVyIMOXIEhFQVJUIMOXIGFnZSIsCiAgICAiZmFjdG9yX25hbWVNX0dNOmFnZTpjaGFyYWN0ZXJSX0dNIiA9ICJjaGFyYWN0ZXIgw5cgTUlORCDDlyBhZ2UiKSkgJT4lCiAgYXJyYW5nZShQYXJhbWV0ZXIpICU+JQogIG11dGF0ZShYID0gaWZlbHNlKFEyLjUgKiBROTcuNSA+IDAsICIqIiwgIiIpKSAlPiUKICBtdXRhdGVfYXQodmFycygtUGFyYW1ldGVyLCAtWCksCiAgICAgICAgICAgIGZ1bnMoZm9ybWF0KHJvdW5kKC4sIDIpLCBuc21hbGwgPSAyKSkpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIEVycm9yID0gRXN0LkVycm9yLCAiICIgPSBYKSAlPiUKICB1bml0ZShgOTUlIENJYCwgUTIuNSwgUTk3LjUsIHNlcCA9ICIsICIpICU+JQogIG11dGF0ZShgOTUlIENJYCA9IHBhc3RlMCgiWyIsIGA5NSUgQ0lgLCAiXSIpKSAlPiUKICBrbml0cjo6a2FibGUoZm9ybWF0ID0gImh0bWwiLCBhbGlnbiA9IGMoImwiLCByZXAoInIiLCAzKSksCiAgICAgICAgICAgICAgIGNhcHRpb24gPSAiVGFibGUgMjogRml4ZWQgZWZmZWN0cyBmcm9tIGEgbWl4ZWQtZWZmZWN0cyBCYXllc2lhbiByZWdyZXNzaW9uIG1vZGVsIG9mIGNoaWxkcmVuJ3MgcmVzcG9uc2VzLCBwcmVkaWN0aW5nIGZhY3RvciBzY29yZXMgaW4gU3R1ZHkgMSBieSBjaGFyYWN0ZXIgKGJlZXRsZSwgcm9ib3QpLCBmYWN0b3IgKEJPRFksIEhFQVJULCBNSU5EKSwgYW5kIGV4YWN0IGFnZS4gVGhlIG1vZGVsIHVzZWQgdGhlIGZvcm11bGEgJ2ZhY3RvciBzY29yZSB+IGZhY3RvciAqIGFnZSAqIGNoYXJhY3RlciArICgxIHwgc3ViamVjdCknIGFuZCB3YXMgaW1wbGVtZW50ZWQgaW4gdGhlICdicm1zJyBwYWNrYWdlIGZvciBSIChCw7xya25lciwgMjAxNykuIEZhY3RvciBhbmQgY2hhcmFjdGVyIHdlcmUgZWZmZWN0LWNvZGVkLCBhbmQgYWdlIHdhcyBtZWFuLWNlbnRlcmVkLiBBc3Rlcmlza3MgbWFyayBwYXJhbWV0ZXJzIHdob3NlIDk1JSBjcmVkaWJsZSBpbnRlcnZhbCBkb2VzIG5vdCBpbmNsdWRlIDAuIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIkNvbGxhcHNpbmcgYWNyb3NzIGFnZSIsIDEsIDYpICU+JQogIGdyb3VwX3Jvd3MoIkFnZSBlZmZlY3RzIiwgNywgMTIpCmBgYAoKSW5kZWVkLCB2aXN1YWwgaW5zcGVjdGlvbiBvZiBGaWd1cmUgNCBzdWdnZXN0cyB0aGF0LCBhY3Jvc3MgYWxsIHRocmVlIGRvbWFpbnMgKF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyksIGNoaWxkcmVuJ3MgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyB0byBiZWV0bGVzIGFuZCByb2JvdHMgYXBwZWFyZWQgdG8gYmVjb21lIG1vcmUgYWR1bHQtbGlrZSB3aXRoIGFnZeKAlGJ1dCB3aGlsZSB0aGUgb2xkZXN0IGNoaWxkcmVuIHdlcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhZHVsdHMgaW4gdGhlIF9CT0RZXyBhbmQgX01JTkRfIGRvbWFpbnMsIGV2ZW4gdGhlIG9sZGVzdCBjaGlsZHJlbiBhcHBlYXIgdG8gaGF2ZSBhdHRyaWJ1dGVkIG1vcmUgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgdG8gdGhlc2UgZW50aXRpZXMgdGhhbiBtb3N0IGFkdWx0cyBkaWQuCgpgYGB7cn0KZmlnMDRfcGxvdCA8LSBnZ3Bsb3QoZWZhXzNfc2NvcmVzX2QxX2FsbCAlPiUgZmlsdGVyKCFpcy5uYShhZ2UpKSwKICAgICAgICAgICAgICAgICAgICAgYWVzKHggPSBhZ2UsIHkgPSBzY29yZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBjaGFyYWN0ZXIsIGNvbG9yID0gY2hhcmFjdGVyLCBzaGFwZSA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKH4gZmFjdG9yX25hbWUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDIpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4yKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BvaW50KGRhdGEgPSBlZmFfM19zY29yZXNfZDFfYWxsICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiKSwKICAgICAgICAgICAgIGFlcyh4ID0gMTEpLCBhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShkb2RnZS53aWR0aCA9IDAuNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci53aWR0aCA9IDAuMjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBlZmFfM19zY29yZXNfYm9vdF9kMV9hbGwgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgICAgICBhZXMoeCA9IDExLCB5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDEuMjUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYyg3OjExKSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMocGFzdGUwKDc6MTAsICJ5IiksICJhZHVsdHMiKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwLCAxMCwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDIxLCAyMikpICsKICB0aGVtZV9idygpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEsIHNpemUgPSAzKSkpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC41fQpmaWcwNF93aXRoX2NhcHRpb24gPC0gYWRkX3N1YihmaWcwNF9wbG90LCBzdHJfd3JhcCgiRmlndXJlIDQ6IEZhY3RvciBzY29yZXMgZm9yIGFkdWx0cyBhbmQgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAxLCByZXBsb3R0ZWQgdG8gaWxsdXN0cmF0ZSBhZ2UgZWZmZWN0cyB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZS4gTGluZXMgY29ycmVzcG9uZCB0byBsaW5lYXIgcmVncmVzc2lvbnMgY29uc2lkZXJpbmcgY2hpbGRyZW4ncyBzY29yZXMgYWxvbmUuIEVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMgb24gYWR1bHRzJyBzY29yZXMuIE5vdGUgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIHktYXhpcyBkaWZmZXJzIGFjcm9zcyBwYW5lbHMuIiwgMTM1KSwgeCA9IDAsIGhqdXN0ID0gMCkKZ2dkcmF3KGZpZzA0X3dpdGhfY2FwdGlvbikKYGBgCgpUYWtlbiB0b2dldGhlciwgdGhlc2UgYW5hbHlzZXMgY29udmVyZ2UgdG8gc3VnZ2VzdCBvbmx5IG1pbm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiB0aGVpciBhdHRyaWJ1dGlvbnMgb2YgX0JPRFlfIGFuZCBfTUlORF8gdG8gYmVldGxlcyBhbmQgcm9ib3Rz4oCUYnV0IGEgbWFqb3IgZGlmZmVyZW5jZSBpbiBfSEVBUlRfOiBSZWxhdGl2ZSB0byBhZHVsdHMsIGNoaWxkcmVuIHRlbmRlZCB0byBjcmVkaXQgYm90aCBiZWV0bGVzIGFuZCByb2JvdHMgd2l0aCBtdWNoIGdyZWF0ZXIgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMuIAoKIyMgRGlzY3Vzc2lvbgoKU3R1ZHkgMSBzaGVkIGxpZ2h0IG9uIHR3byBkaXN0aW5jdCBhc3BlY3RzIG9mIHRoZSBkZXZlbG9wbWVudCBvZiBjaGlsZHJlbidzIGNvbmNwZXR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlOiBjb250aW51aXR5IGluIHRoZSB1bmRlcmx5aW5nIGNvbmNlcHR1YWwgX3N0cnVjdHVyZV8gYW5kIHZhcmlhYmlsdHkgaW4gdGhlIF9hcHBsaWNhdGlvbl8gb2YgdGhlc2UgY29uY2VwdHMuIAoKT24gdGhlIG9uZSBoYW5kLCBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzZXMgc3VnZ2VzdGVkIHRoYXQgYnkgbWlkZGRsZSBjaGlsZGhvb2QgKDctOXkpLCB0aGUgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgdW5kZXJseWluZyBVUyBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBtZW50YWwgbGlmZSBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBvZiBVUyBhZHVsdHMsIGFuY2hvcmVkIGJ5IHN1aXRlcyBvZiBtZW50YWwgY2FwYWNpdGllcyByZWxhdGVkIHRvIF9CT0RZXyAocGh5c2lvbG9naWNhbCBzZW5zYXRpb25zKSwgX0hFQVJUXyAoc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMpLCBhbmQgX01JTkRfIChwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMpLiBXZSBub3RlIHRoYXQsIGluIHByaW5jaXBsZSwgYSBudW1iZXIgb2YgYWRkaXRpb25hbCBvciBhbHRlcm5hdGl2ZSBsYXRlbnQgZmFjdG9ycyBjb3VsZCBoYXZlIGVtZXJnZWQgZnJvbSB0aGUgZmFjdG9yIGFuYWx5c2lzIG9mIGNoaWxkcmVuJ3MgcmVzcG9uc2VzLiBGb3IgZXhhbXBsZSwgY2hpbGRyZW4gbWlnaHQgaGF2ZSBkaXN0aW5ndWlzaGVkIHByaW1hcmlseSBiZXR3ZWVuIGludGVybmFsIGV4cGVyaWVuY2UgYW5kIGV4dGVybmFsIGFjdGlvbiAoR3JheSBldCBhbC4sIDIwMDcpLCBvciB0aGV5IG1pZ2h0IGhhdmUgZGVtb25zdHJhdGVkIGZpbmVyLWdyYWluZWQgZ3JvdXBpbmdzIG9mIG1lbnRhbCBjYXBhY2l0aWVzIGJhc2VkIG9uIHBocmFzaW5nLCByb3RlIGtub3dsZWRnZSwgZXRjLiBJbnN0ZWFkLCB0aGUgbGF0ZW50IGNvbmNlcHR1YWwgc3RydWN0dXJlIHVuZGVybHlpbmcgY2hpbGRyZW4ncyByZXNwb25zZXMgYXBwZWFycyB0byBiZSB2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBvZiBhZHVsdHMsIGJvdGggaW4gdGhpcyBzdHVkeSBhbmQgaW4gV2Vpc21hbiBldCBhbC4ncyAoMjAxNykgcHJldmlvdXMgd29yay4gSW4gb3RoZXIgd29yZHMsIGFueSBkcmFtYXRpYyBkZXZlbG9wbWVudGFsIGNoYW5nZXMgdG8gdGhpcyBjb25jZXB0dWFsIHN0cnVjdHVyZSBsaWtlbHkgb2NjdXIgcHJpb3IgdG8gdGhlIGFnZSBvZiA3IHllYXJzLgoKT24gdGhlIG90aGVyIGhhbmQsIGFuYWx5c2VzIG9mIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIHdpdGhpbiB0aGlzIHNoYXJlZCBjb25jZXB0dWFsIHN0cnVjdHVyZSBzdWdnZXN0ZWQgdGhhdCB0aGVpciBhcHBsaWNhdGlvbiBvZiB0aGlzIGNvbmNlcHTigJRpbiBwYXJ0aWN1bGFyLCB0aGVpciBhdHRyaWJ1dGlvbnMgb2YgdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIG9mIHRoZSBfSEVBUlRf4oCUbWF5IGJlIHVuZGVyZ29pbmcgY29udGludWluZyByZWZpbmVtZW50IHRocm91Z2ggbWlkZGxlIGNoaWxkaG9vZC4gVGhlIHNwZWNpZmljaXR5IG9mIHRoaXMgYWdlIGRpZmZlcmVuY2XigJR3aGljaCBlbWVyZ2VkIGRyYW1hdGljYWxseSBpbiBvbmUgZG9tYWluIChfSEVBUlRfKSwgYnV0IG5vdCBvdGhlcnMgKF9CT0RZXywgX01JTkRfKeKAlHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyB1bmxpa2VseSB0byBiZSBkdWUgZWl0aGVyIHRvIGEgZ2VuZXJhbCB0ZW5kZW5jeSB0b3dhcmQgIm1lbnRhbGl6aW5nIiB0aGVzZSBjaGFyYWN0ZXJzIChvciBhIHNpbXBsZSAieWVzIiBiaWFzKS4gQnV0IGl0cyBleHRlbnNpb24gdG8gYm90aCBiZWV0bGVzIGFuZCByb2JvdHMgcmFpc2VzIG1hbnkgcXVlc3Rpb25zLiBXaXRoIHJlZ2FyZCB0byByb2JvdHMsIGNoaWxkcmVuIGdyb3dpbmcgdXAgaW4gdGhlIDIxc3QgY2VudHVyeSBtaWdodCBiZSBjb252ZXJnaW5nIG9uIGEgbmV3IHVuZGVyc3RhbmRpbmcgb2YgdGVjaG5vbG9naWNhbCAiYmVpbmdzIiBhcyBpbmFuaW1hdGUgb2JqZWN0cyB3aXRoIHNvbWUgZGVncmVlIG9mIHNvY2lhbC1lbW90aW9uYWwgbGlmZSAoc2VlIEthaG4sIEdhcnksICYgU2hlbiwgMjAxMynigJRidXQgdGhpcyBraW5kIG9mIGhpc3RvcmljYWwgY29uY2VwdHVhbCBjaGFuZ2Ugd291bGQgbm90IHByZWRpY3QgdGhlIGhpZ2ggcmF0ZXMgb2Ygc29jaWFsLWVtb3Rpb25hbCBhdHRyaWJ1dGlvbnMgdG8gYmVldGxlcyB0aGF0IHdlIG9ic2VydmVkLiBPdXIgZmluZGluZ3MgYXJlIHBlcmhhcHMgbW9yZSBjb25zaXN0ZW50IHdpdGggYSBnZW5lcmFsIG9wZW5uZXNzIHRvIHVudHJhZGl0aW9uYWwgc29jaWFsIHBhcnRuZXJzIHRoYXQgZXh0ZW5kcyBpbnRvIG1pZGRsZSBjaGlsZGhvb2QgKGJ1dCBub3QgYWR1bHRob29kKeKAlG9yIHdpdGggYSBkaWZmZXJlbmNlIGluIGNvbnN0cnVhbHMgb2Ygd2hhdCBpdCBtZWFucyB0byBmZWVsIHByb3VkLCBoYXBweSwgZ3VpbHR5LCBldGMuIFRvIHdoYXQga2luZHMgb2YgZW50aXRpZXMgd291bGQgY2hpbGRyZW4gb2YgdGhpcyBhZ2UgZGVueSBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcywgYW5kIGhvdyBkbyB0aGV5IGRyYXcgdGhpcyBsaW5lPyBIb3cgd291bGQgeW91bmdlciBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBfSEVBUlRfIChhcyB3ZWxsIGFzIF9CT0RZXyBhbmQgX01JTkRfKSBjb21wYXJlPwoKIyBTdHVkeSAyCgpUaGUgZ29hbHMgb2YgU3R1ZHkgMiB3ZXJlIHRocmVlZm9sZC4gCgpGaXJzdCwgd2UgYWltZWQgdG8gZXh0ZW5kIG91ciBmaW5kaW5ncyB3aXRoIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgMSwgYnkgZXhwYW5kaW5nIHRoZSBsaXN0IG9mIHRoZSB0YXJnZXQgY2hhcmFjdGVycyB0byBpbmNsdWRlIG5vdCBvbmx5IHRoZSB0d28gImVkZ2UgY2FzZXMiIGZyb20gU3R1ZHkgMSAoYSBiZWV0bGUgYW5kIGEgcm9ib3QpLCBidXQgYSBhbHNvIGEgd2lkZXIgcmFuZ2Ugb2YgYW5pbWF0ZSBiZWluZ3MgKGEgYmlyZCwgYSBnb2F0LCBhbmQgYW4gZWxlcGhhbnQpIGFuZCBpbmFuaW1hdGUgb2JqZWN0cyAoYSBjb21wdXRlciwgYSB0ZWRkeSBiZWFyLCBhbmQgYSBkb2xsKS4gSW4gY29udHJhc3QgdG8gU3R1ZHkgMSwgd2hlcmUgd2UgdHJhY2tlZCB3aGljaCBtZW50YWwgY2FwYWNpdGllcyAiaGFuZyB0b2dldGhlciIgd2hlbiBwYXJ0aWNpcGFudHMgcmVhc29uZWQgYWJvdXQgY29udHJvdmVyc2lhbCAiZWRnZSBjYXNlcyIgaW4gc29jaWFsIHJlYXNvbmluZywgU3R1ZHkgMiBhbGxvd2VkIHVzIHRvIHRyYWNrIHdoaWNoIG1lbnRhbCBjYXBhY2l0aWVzICJoYW5nIHRvZ2V0aGVyIiB3aGVuIHRhcmdldCBjaGFyYWN0ZXJzIGFyZSBwZXJjZWl2ZWQgdG8gdmFyeSBpbiB0aGVpciBtZW50YWwgY2FwYWNpdHkgcHJvZmlsZXMuIEluIFdlaXNtYW4gZXQgYWwuJ3Mgb3JpZ2luYWwgc3R1ZGllcywgdGhpcyBhcHByb2FjaCB5aWVsZGVkIGEgaGlnaGx5IHNpbWlsYXIgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgdG8gdGhlICJlZGdlIGNhc2UiIGFwcHJvYWNoIChXZWlzbWFuIGV0IGFsLiwgMjAxNzsgU3R1ZHkgNCkuIFdlIHJlYXNvbmVkIHRoYXQgaWYgdGhpcyB0aHJlZS1wYXJ0IGNvbmNlcHR1YWwgc3RydWN0dXJlIGlzIHN0YWJsZSBhbmQgcm9idXN0IGJ5IHRoZSBhZ2Ugb2YgNy05IHllYXJzLCBpdCBzaG91bGQgbWFuaWZlc3QgYW1vbmcgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiB1bmRlciB0aGUgc2FtZSByYW5nZSBvZiBjb25kaXRpb25zIHRoYXQgaXQgZG9lcyBhbW9uZyBhZHVsdHMuIAoKT3VyIHNlY29uZCBnb2FsIHdhcyB0byBhc3Nlc3MgdGhlIGVhcmxpZXIgZGV2ZWxvcG1lbnQgb2YgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgaW4gYSBncm91cCBvZiB5b3VuZ2VyIGNoaWxkcmVuLiBXZSB0YXJnZXRlZCA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuIGZvciBvdXIgeW91bmdlciBhZ2UgZ3JvdXAgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIGlkZW50aWZpZWQgYXMgYSBwZXJpb2Qgb2YgZHJhbWF0aWMgZGV2ZWxvcG1lbnQgaW4gc2V2ZXJhbCByZWxldmFudCBkb21haW5zLiBNYW55IHN0dWRpZXMgaGF2ZSBkb2N1bWVudGVkIHNoaWZ0cyBpbiBjaGlsZHJlbidzIGFiaWxpdGllcyB0byB0YWtlIG90aGVycycgcGVyc3BlY3RpdmVzLCByZXByZXNlbnQgZmFsc2UgYmVsaWVmcywgYW5kIGludGVncmF0ZSByZXByZXNlbnRhdGlvbnMgb2YgaW50ZW50aW9ucyBhbmQgb3V0Y29tZXMgaW4gZXZhbHVhdGluZyBtb3JhbCByZXNwb25zaWJpbGl0eSAoZm9yIHJldmVpd3MsIHNlZSBGbGF2ZWxsLCAxOTk5OyBXZWxsbWFuLCAyMDE1KS4gVGhlIHByZXNjaG9vbCB5ZWFycyBoYXZlIGFsc28gYmVlbiB0aGUgZm9jdXMgb2YgYSByaWNoIHRyYWRpdGlvbiBvZiB3b3JrIG9uIGxheSBiaW9sb2d5IGFuZCB0aGUgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24gZXh0ZW5kaW5nIGJhY2sgbmVhcmx5IGEgY2VudHVyeSAoZS5nLiwgQ2FyZXksIDE5ODU7IFIuIEdlbG1hbiwgU3BlbGtlLCAmIE1lY2ssIDE5ODM7IE1lZGluLCBXYXhtYW4sIFdvb2RyaW5nLCAmIFdhc2hpbmF3YXRvaywgMjAxMDsgUGlhZ2V0LCAxOTI5OyBmb3IgYSByZXZpZXcsIHNlZSBTLiBHZWxtYW4gJiBPcGZlciwgMjAwMikuIEFsbCBvZiB0aGVzZSBhY2NvdW50cyBtYWtlIHRoZSBjYXNlIHRoYXQgYmVjb21pbmcgYSBzb3BoaXN0aWNhdGVkIHJlYXNvbmVy4oCUYW5kIHBhcnRpY3VsYXJseSBhIHNvcGhpc3RpY2F0ZWQgc29jaWFsIHJlYXNvbmVy4oCUcmVxdWlyZXMgc3Vic3RhbnRpYWwgcmVmaW5lbWVudCBvZiBvbmUncyByZXByZXNlbnRhdGlvbnMgb2Ygb3RoZXJzJyBleHBlcmllbmNlcywgYmVsaWVmcywgZGVzaXJlcywgYW5kIG5lZWRzLiBNaWdodCB0aGVzZSByZWZpbmVtZW50cyBpbmNsdWRlIGNoYW5nZXMgdG8gdGhlIHN0cnVjdHVyZSBvZiBjaGlsZHJlbidzIGNvbmNlcHRzIG9mIG1lbnRhbCBsaWZlPyAKCk91ciB0aGlyZCBnb2FsIHdhcyB0byBleGFtaW5lIGFnZS1yZWxhdGVkIGNoYW5nZXMgaW4gd2hpY2ggbWVudGFsIGNhcGFjaXRpZXMgdGVuZCB0byBiZSBhdHRyaWJ1dGVkIHRvIHdoaWNoIHRhcmdldCBjaGFyYWN0ZXJzLiBJbiBzdW1tYXJpemluZyB0aGUgcmVzdWx0cyBvZiBTdHVkeSAxLCB3ZSBkaXNjdXNzZWQgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBhcyB0aGUgImFwcGxpY2F0aW9uIiBvZiBjb25jZXB0cyBvZiBtZW50YWwgbGlmZSwgaW4gY29udHJhc3QgdG8gdGhlIGNvbmNlcHR1YWwgInN0cnVjdHVyZSIgcmV2ZWFsZWQgYnkgZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzLiBCeSBleHBhbmRpbmcgdGhlIHJhbmdlIG9mIHRhcmdldCBjaGFyYWN0ZXJzIGluY2x1ZGVkIGluIHRoZSBzdHVkeSwgU3R1ZHkgMiBwcm92aWRlcyBhbiBvcHBvcnR1bml0eSB0byBleHBsb3JlIGNoYW5nZXMgaW4gaG93IGNoaWxkcmVuIGFwcGx5IHRoZWlyIGRldmVsb3BpbmcgY29uY2VwdHMgb2YgbWVudGFsIGxpZmUgdG8gYSB2YXJpZXR5IG9mIGFuaW1hdGUgYmVpbmdzIGFuZCBpbmFuaW1hdGUgb2JqZWN0cy4KCiMjIE1ldGhvZAoKIyMjIFBhcnRpY2lwYW50cwoKYHIgbnJvdyhkMl9hZF93aWRlKSArIG5yb3coZDJfNzlfd2lkZSlgIHBlb3BsZSBwYXJ0aWNpcGF0ZWQgaW4gdGhpcyBzdHVkeSwgaW5jbHVkaW5nIGEgZ3JvdXAgb2YgYWR1bHRzLCBhIGdyb3VwIG9mICJvbGRlciIgY2hpbGRyZW4gKDctOXkpLCBhbmQgYSBncm91cCBvZiAieW91bmdlciIgY2hpbGRyZW4gKDQtNnkpLgoKYGBge3J9CiMgZGVtb2dyYXBoaWNzCmQyX2FkX2dlbmRlciA8LSBkZW1vX2Z1bihkMl9hZCwgImdlbmRlciIsIDIpCmQyX2FkX2V0aG5pY2l0eSA8LSBkZW1vX2Z1bihkMl9hZCwgImV0aG5pY2l0eV9jYXQiLCAyKQpgYGAKCkFkdWx0cyAoX25fPWByIG5yb3coZDJfYWRfd2lkZSlgKSBwYXJ0aWNpcGF0ZWQgdmlhIE1UdXJrIGluIFNlcHRlbWJlciAyMDE4LiBBZHVsdCBwYXJ0aWNpcGFudHMgaGFkIGdhaW5lZCBhcHByb3ZhbCBmb3IgYXQgbGVhc3QgOTUlIG9mIHRoZWlyIHByZXZpb3VzIHdvcmsgb24gTVR1cms7IGhhZCBNVHVyayBhY2NvdW50cyBiYXNlZCBpbiB0aGUgVVM7IGFuZCBpbmRpY2F0ZWQgdGhhdCB0aGV5IHdlcmUgYXQgbGVhc3QgMTggeWVhcnMgb2xkLiBBZHVsdHMgd2VyZSBwYWlkIFwkMC40NSBmb3IgYXBwcm94aW1hdGVseSAyLTQgbWludXRlcyBvZiB0aGVpciB0aW1lIChtZWRpYW4gZHVyYXRpb246IGByIHN1bW1hcnkoZDJfYWQkZHVyYXRpb24pWyJNZWRpYW4iXSAlPiUgcm91bmQoMilgIG1pbikuIEFuIGFkZGl0aW9uYWwgMjIgYWR1bHRzIHBhcnRpY2lwYXRlZCBidXQgd2VyZSBleGNsdWRlZCBmb3IgZmFpbGluZyB0byByZXNwb25kIHNlbnNpYmx5IHRvIGFuIG9wZW4tZW5kZWQgcXVlc3Rpb24gYWJvdXQgd2hhdCB0aGV5IGhhZCBiZWVuIGFza2VkIHRvIGRvIGluIHRoZSBzdHVkeSAoZS5nLiwgY29weWluZyBhbmQgcGFzdGluZyB0ZXh0IGZyb20gdGhlIHF1ZXN0aW9uLCB3cml0aW5nICJnb29kIHN0dWR5LCIgb3IgZGVzY3JpYmluZyBhIGRpZmZlcmVudCBzdHVkeSwgZS5nLiwgIkkgd3JvdGUgYW4gZXNzYXkgYWJvdXQgbmF0dXJlIjsgX25fPTExKSBvciBmb3IgZmFpbGluZyB0byBwYXNzIG9uZSBvciBtb3JlIGF0dGVudGlvbiBjaGVja3MgKGUuZy4sICJQbGVhc2Ugc2VsZWN0IG5vIjsgX25fPTExKS4gQWNjb3JkaW5nIHRvIHNlbGYgcmVwb3J0LCB0aGUgZmluYWwgYWR1bHQgc2FtcGxlIHJhbmdlZCBpbiBhZ2UgZnJvbSBgciBzdW1tYXJ5KGQyX2FkJGFnZSlbIk1pbi4iXWAtYHIgc3VtbWFyeShkMl9hZCRhZ2UpWyJNYXguIl1gIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDJfYWQkYWdlKVsiTWVkaWFuIl1geSkgYW5kIGluY2x1ZGVkIHNsaWdodGx5IG1vcmUgbWVuIChgciByb3VuZChkMl9hZF9nZW5kZXIkcHJvcFtkMl9hZF9nZW5kZXIkZ2VuZGVyPT0ibSJdLCAyKSAqIDEwMGAlKSB0aGFuIHdvbWVuIChgciByb3VuZChkMl9hZF9nZW5kZXIkcHJvcFtkMl9hZF9nZW5kZXIkZ2VuZGVyPT0iZiJdLCAyKSAqIDEwMGAlKS4gQWR1bHRzIHByZWRvbWluYW50bHkgaWRlbnRpZmllZCBhcyBXaGl0ZSAoYHIgZDJfYWRfZXRobmljaXR5JHByb3BbZDJfYWRfZXRobmljaXR5JGV0aG5pY2l0eV9jYXQ9PSJ3aGl0ZSJdICogMTAwYCU7IGByIGQyX2FkX2V0aG5pY2l0eSRwcm9wW2QyX2FkX2V0aG5pY2l0eSRldGhuaWNpdHlfY2F0PT0ibXVsdGkiXSAqIDEwMGAlIGlkZW50aWZpZWQgYXMgbW9yZSB0aGFuIG9uZSByYWNlL2V0aG5pY2l0eSwgYW5kICRcbGVxJCBgciBkYXRhLmZyYW1lKGQyX2FkX2V0aG5pY2l0eSAlPiUgZmlsdGVyKCFldGhuaWNpdHlfY2F0ICVpbiUgYygid2hpdGUiLCAibXVsdGkiKSkpJHByb3AgJT4lIG1heCgpICogMTAwYCUgYXMgYW55IG90aGVyIHJhY2UvZXRobmljaXR5KS4KCmBgYHtyfQojIGRlbW9ncmFwaGljcwpkMl83OV9nZW5kZXIgPC0gZGVtb19mdW4oZDJfNzksICJnZW5kZXIiLCAyKQpkMl83OV9ldGhuaWNpdHkgPC0gZGVtb19mdW4oZDJfNzksICJldGhuaWNpdHkiLCAyKQpkMl80Nl9nZW5kZXIgPC0gZGVtb19mdW4oZDJfNDYsICJnZW5kZXIiLCAyKQpkMl80Nl9ldGhuaWNpdHkgPC0gZGVtb19mdW4oZDJfNDYsICJldGhuaWNpdHkiLCAyKQpgYGAKCldlIHJlY3J1aXRlZCB0d28gZ3JvdXBzIG9mIGNoaWxkcmVuOiAib2xkZXIiIGNoaWxkcmVuICg3LTl5KSBhbmQgInlvdW5nZXIiIGNoaWxkcmVuICg0LTZ5KS4gT3VyIHBsYW5uZWQgc2FtcGxlIHNpemUgd2FzIDEyMCBwZXIgYWdlIGdyb3VwLCBidXQgd2UgYWxzbyByZXRhaW5lZCBhIGhhbmRmdWwgb2YgZXh0cmEgcGFydGljaXBhbnRzIHdobyBjb21wbGV0ZWQgdGhlIHN0dWR5IG9uIHRoZSBmaW5hbCBkYXkgb2YgZGF0YSBjb2xsZWN0aW9uIGZvciBlYWNoIGdyb3VwLgoKVGhlIGdyb3VwIHRoYXQgd2Ugd2lsbCByZWZlciB0byBhcyAib2xkZXIgY2hpbGRyZW4iIChfbl89YHIgbnJvdyhkMl83OV93aWRlKWApIHJhbmdlZCBpbiBhZ2UgZnJvbSBgciBzdW1tYXJ5KGQyXzc5JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAtYHIgc3VtbWFyeShkMl83OSRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgeSksIGFuZCBwYXJ0aWNpcGF0ZWQgYXQgb25lIG9mIHNldmVyYWwgU2FuIEZyYW5jaXNjbyBCYXkgQXJlYSBtdXNldW1zIG9yIGF0IHRoZWlyIHlvdW5nZXIgc2libGluZydzIHByZXNjaG9vbCBiZXR3ZWVuIEp1bHktRGVjZW1iZXIgMjAxNi4gVGhlIHN0dWR5IHRvb2sgbW9zdCBvbGRlciBjaGlsZHJlbiB1bmRlciBgciBxdWFudGlsZShkMl83OSRkdXJhdGlvbiwgLjc1LCBuYS5ybSA9IFQpICU+JSBhcy5udW1lcmljKCkgJT4lIGNlaWxpbmcoKWAgbWludXRlcyB0byBjb21wbGV0ZSAobWVkaWFuIGR1cmF0aW9uOiBgciBzdW1tYXJ5KGQyXzc5JGR1cmF0aW9uKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIG1pbikuIEFjY29yZGluZyB0byBwYXJlbnRhbCByZXBvcnQsIHRoZSBzYW1wbGUgb2Ygb2xkZXIgY2hpbGRyZW4gaW5jbHVkZWQgc2xpZ2h0bHkgbW9yZSBib3lzIChgciBkMl83OV9nZW5kZXIkcHJvcFtkMl83OV9nZW5kZXIkZ2VuZGVyPT0ibSJdICogMTAwYCUpIHRoYW4gZ2lybHMgKGByIGQyXzc5X2dlbmRlciRwcm9wW2QyXzc5X2dlbmRlciRnZW5kZXI9PSJmIl0gKiAxMDBgJSk7IGByIGQyXzc5X2dlbmRlciRwcm9wW2QyXzc5X2dlbmRlciRnZW5kZXI9PSJNSVNTSU5HIl0gKiAxMDBgJSBvZiBjaGlsZHJlbidzIGdlbmRlciB3YXMgbm9uLWJpbmFyeSBvciB1bmtub3duKS4gUGFyZW50cyBwcmVkb21pbmFudGx5IGlkZW50aWZpZWQgdGhlaXIgY2hpbGRyZW4gYXMgV2hpdGUgKGByIGQyXzc5X2V0aG5pY2l0eSRwcm9wW2QyXzc5X2V0aG5pY2l0eSRldGhuaWNpdHk9PSJ3aGl0ZSJdICogMTAwYCUpLCBTb3V0aCBBc2lhbiAoYHIgZDJfNzlfZXRobmljaXR5JHByb3BbZDJfNzlfZXRobmljaXR5JGV0aG5pY2l0eT09InNvdXRoIG9yIHNvdXRoZWFzdCBhc2lhbiJdICogMTAwYCUpLCBtdWx0aXJhY2lhbCAoYHIgZDJfNzlfZXRobmljaXR5JHByb3BbZDJfNzlfZXRobmljaXR5JGV0aG5pY2l0eT09Im11bHRpIl0gKiAxMDBgJSksIG9yIEVhc3QgQXNpYW4gKGByIGQyXzc5X2V0aG5pY2l0eSRwcm9wW2QyXzc5X2V0aG5pY2l0eSRldGhuaWNpdHk9PSJlYXN0IGFzaWFuIl0gKiAxMDBgJSk7ICRcbGVxJCBgciBkYXRhLmZyYW1lKGQyXzc5X2V0aG5pY2l0eSAlPiUgZmlsdGVyKCFldGhuaWNpdHkgJWluJSBjKCJ3aGl0ZSIsICJtdWx0aSIsICJlYXN0IGFzaWFuIiwgInNvdXRoIG9yIHNvdXRoZWFzdCBhc2lhbiIsICJNSVNTSU5HIikpKSRwcm9wICU+JSBtYXgoKSAqIDEwMGAlIG9mIGNoaWxkcmVuIHdlcmUgaWRlbnRpZmllZCBhcyBhbnkgb3RoZXIgcmFjZS9ldGhuaWNpdHksIGFuZCBgciBkMl83OV9ldGhuaWNpdHkkcHJvcFtkMl83OV9ldGhuaWNpdHkkZXRobmljaXR5PT0iTUlTU0lORyJdICogMTAwYCUgb2YgY2hpbGRyZW4ncyBwYXJlbnRzIGRlY2xpbmVkIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gb24gdGhlaXIgcmFjZS9ldGhuaWNpdHkpLiAKCiJZb3VuZ2VyIGNoaWxkcmVuIiAoX25fPWByIG5yb3coZDJfNDZfd2lkZSlgKSByYW5nZWQgaW4gYWdlIGZyb20gYHIgc3VtbWFyeShkMl80NiRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgLWByIHN1bW1hcnkoZDJfNDYkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCB5ZWFycyAobWVkaWFuOiBgciBzdW1tYXJ5KGQyXzQ2JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYHkpLCBhbmQgcGFydGljaXBhdGVkIGVpdGhlciBhdCBhIHVuaXZlcnNpdHktYWZmaWxpYXRlZCBwcmVzY2hvb2wgb3IgYXQgYSBCYXkgQXJlYSBtdXNldW0gYmV0d2VlbiBKYW51YXJ5LUp1bmUgMjAxNy4gVGhlIHN0dWR5IHRvb2sgbW9zdCB5b3VuZ2VyIGNoaWxkcmVuIHVuZGVyIGByIHF1YW50aWxlKGQyXzQ2JGR1cmF0aW9uLCAuNzUsIG5hLnJtID0gVCkgJT4lIGFzLm51bWVyaWMoKSAlPiUgY2VpbGluZygpYCBtaW51dGVzIHRvIGNvbXBsZXRlIChtZWRpYW4gZHVyYXRpb246IGByIHN1bW1hcnkoZDJfNDYkZHVyYXRpb24pWyJNZWRpYW4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAgbWluKS4gQWNjb3JkaW5nIHRvIHBhcmVudGFsIHJlcG9ydCBhbmQgc2Nob29sIHJlY29yZHMsIHRoZSBzYW1wbGUgb2YgeW91bmdlciBjaGlsZHJlbiBpbmNsdWRlZCByb3VnaGx5IHRoZSBzYW1lIG51bWJlcnMgb2YgZ2lybHMgKGByIGQyXzQ2X2dlbmRlciRwcm9wW2QyXzQ2X2dlbmRlciRnZW5kZXI9PSJtIl0gKiAxMDBgJSkgYW5kIGJveXMgKGByIGQyXzQ2X2dlbmRlciRwcm9wW2QyXzQ2X2dlbmRlciRnZW5kZXI9PSJmIl0gKiAxMDBgJSkuIENoaWxkcmVuIHdlcmUgcHJlZG9taW5hbnRseSBpZGVudGlmaWVkIGFzIG11bHRpcmFjaWFsIChgciBkMl80Nl9ldGhuaWNpdHkkcHJvcFtkMl80Nl9ldGhuaWNpdHkkZXRobmljaXR5PT0ibXVsdGkiXSAqIDEwMGAlKSBvciBXaGl0ZSAoYHIgZDJfNDZfZXRobmljaXR5JHByb3BbZDJfNDZfZXRobmljaXR5JGV0aG5pY2l0eT09IndoaXRlIl0gKiAxMDBgJTsgJFxsZXEkIGByIGRhdGEuZnJhbWUoZDJfNDZfZXRobmljaXR5ICU+JSBmaWx0ZXIoIWV0aG5pY2l0eSAlaW4lIGMoIndoaXRlIiwgIm11bHRpIiwgIk1JU1NJTkciKSkpJHByb3AgJT4lIG1heCgpICogMTAwYCUgb2YgY2hpbGRyZW4gd2VyZSBpZGVudGlmaWVkIGFzIGFueSBvdGhlciByYWNlL2V0aG5pY2l0eSwgYW5kIGByIGQyXzQ2X2V0aG5pY2l0eSRwcm9wW2QyXzQ2X2V0aG5pY2l0eSRldGhuaWNpdHk9PSJNSVNTSU5HIl0gKiAxMDBgJSBvZiBjaGlsZHJlbidzIHBhcmVudHMgZGVjbGluZWQgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiB0aGVpciByYWNlL2V0aG5pY2l0eSkuCgpBbiBhZGRpdGlvbmFsIDcgY2hpbGRyZW4gcGFydGljaXBhdGVkIGJ1dCB3ZXJlIGV4Y2x1ZGVkIGZvciBiZWluZyBvdXRzaWRlIHRoZSB0YXJnZXQgYWdlIHJhbmdlcy4gQXQgbXVzZXVtcyAoYnV0IG5vdCBhdCB0aGUgcHJlc2Nob29sKSwgY2hpbGRyZW4gcmVjZWl2ZWQgYSBzbWFsbCB0aGFuay15b3UgZ2lmdCAoZS5nLiwgYSBzdGlja2VyKSBmb3IgdGhlaXIgcGFydGljaXBhdGlvbi4gCgojIyMgTWF0ZXJpYWxzIGFuZCBwcm9jZWR1cmUKClBpbG90IHRlc3Rpbmcgc3VnZ2VzdGVkIHRoYXQgd29ya2luZyB3aXRoIHlvdW5nZXIgY2hpbGRyZW4gd291bGQgcmVxdWlyZSBtYWtpbmcgYSBicmllZmVyIGV4cGVyaW1lbnRhbCBwYXJhZGlnbSB3aXRoIGZld2VyIHRoYW4gdGhlIDQwIHF1ZXN0aW9ucyBpbmNsdWRlZCBpbiBTdHVkeSAxOyBsaW1pdGluZyB0aGUgbGlzdCB0byAyMCBxdWVzdGlvbnMgc2VlbWVkIHRvIGFsbG93IGNoaWxkcmVuIGFzIHlvdW5nIGFzIDQgeWVhcnMgb2YgYWdlIHRvIGNvbXBsZXRlIHRoZSBzdHVkeSBlYXNpbHkgYW5kIHdpdGhvdXQgZ2V0dGluZyBib3JlZCBvciBmcnVzdHJhdGVkLCB3aGlsZSBzdGlsbCBpbmNsdWRpbmcgZW5vdWdoIGl0ZW1zIHRvIGVuYWJsZSB1cyB0byBwcm9jZWVkIHdpdGggb3VyIGV4cGxvcmF0b3J5ICJkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24iIGFwcHJvYWNoIHRvIHVuY292ZXJpbmcgY29uY2VwdHVhbCBzdHJ1Y3R1cmUuCgpgYGB7cn0KZDJfYWRfY2hhciA8LSBkZW1vX2Z1bihkMl9hZCwgImNoYXJhY3RlciIpCmQyXzc5X2NoYXIgPC0gZGVtb19mdW4oZDJfNzksICJjaGFyYWN0ZXIiKQpkMl80Nl9jaGFyIDwtIGRlbW9fZnVuKGQyXzQ2LCAiY2hhcmFjdGVyIikKZDJfYWxsX2NoYXIgPC0gZDJfYWRfY2hhciAlPiUgbXV0YXRlKGFnZV9ncm91cCA9ICJhZHVsdHMiKSAlPiUKICBmdWxsX2pvaW4oZDJfNzlfY2hhciAlPiUgbXV0YXRlKGFnZV9ncm91cCA9ICJjaGlsZHJlbjc5IikpICU+JQogIGZ1bGxfam9pbihkMl80Nl9jaGFyICU+JSBtdXRhdGUoYWdlX2dyb3VwID0gImNoaWxkcmVuNDYiKSkKYGBgCgpQYXJ0aWNpcGFudHMgd2VyZSBhc3NpZ25lZCB0byBldmFsdWF0ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0YXJnZXQgY2hhcmFjdGVyczogYW4gZWxlcGhhbnQsIGEgZ29hdCwgYSBtb3VzZSwgYSBiaXJkLCBhIGJlZXRsZSwgYSB0ZWRkeSBiZWFyLCBhIGRvbGwsIGEgcm9ib3QsIG9yIGEgY29tcHV0ZXIgKF9uXyBwZXIgY2hhcmFjYXRlcjogYHIgbWluKGQyX2FkX2NoYXIkbilgLWByIG1heChkMl9hZF9jaGFyJG4pYCBhZHVsdHMsIGByIG1pbihkMl83OV9jaGFyJG4pYC1gciBtYXgoZDJfNzlfY2hhciRuKWAgb2xkZXIgY2hpbGRyZW4sIGFuZCBgciBtaW4oZDJfNDZfY2hhciRuKWAtYHIgbWF4KGQyXzQ2X2NoYXIkbilgIHlvdW5nZXIgY2hpbGRyZW47IHNlZSBGaWd1cmUgNiBmb3IgZXhhY3QgY291bnRzKS4KClBhcnRpY2lwYW50cyB3ZXJlIGFzc2lnbmVkIHRvIHRhcmdldCBjaGFyYWN0ZXJzIHJhbmRvbWx5LCB3aXRoIHR3byBleGNlcHRpb25zOiAoMSkgVGhlIGRvbGwgYW5kIHRlZGR5IGJlYXIgY29uZGl0aW9ucyB3ZXJlIHJ1biBsYXN0IGZvciBvbGRlciBjaGlsZHJlbiAoYnV0IGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIHJhbmRvbWl6YXRpb24gc2NoZW1lIGZvciBhZHVsdHMgYW5kIHlvdW5nZXIgY2hpbGRyZW4pOyBhbmQgKDIpIFRvd2FyZCB0aGUgZW5kIG9mIGRhdGEgY29sbGVjdGlvbiB3aXRoIGNoaWxkcmVuLCBjaGlsZHJlbiB3ZXJlIGFzc2lnbmVkIHRvIGNvbmRpdGlvbnMgdGhhdCBoYWQgdGhlIGZld2VzdCBwYXJ0aWNpcGFudHMuIChUaGlzIHdhcyBub3QgcG9zc2libGUgd2l0aCBhZHVsdHMsIHdoaWNoIGlzIHdoeSB0aGUgbnVtYmVyIG9mIGFkdWx0cyBwZXIgY29uZGl0aW9uIHdhcyBtb3JlIHZhcmlhYmxlIHRoYW4gdGhlIG51bWJlciBvZiBjaGlsZHJlbiBwZXIgY29uZGl0aW9uLikgQXMgaW4gU3R1ZHkgMSwgYSB2aXZpZCwgaGlnaC1yZXNvbHV0aW9uIHBob3RvIG9mIHRoZSB0YXJnZXQgY2hhcmFjdGVyIGluIGEgbmF0dXJhbGlzdGljIGNvbnRleHQgd2FzIHZpc2libGUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgc3R1ZHkuIAoKSW5zdHJ1Y3Rpb25zIGFuZCBwcm9jZWR1cmUgd2VyZSBpZGVudGljYWwgdG8gU3R1ZHkgMSwgd2l0aCB0d28gZXhjZXB0aW9uczogKDEpIFBhcnRpY2lwYW50cyByYXRlZCB0aGUgdGFyZ2V0IGNoYXJhY3RlciBvbiAyMCAocmF0aGVyIHRoYW4gNDApIG1lbnRhbCBjYXBhY2l0aWVzOyBhbmQgKDIpIEZvciB5b3VuZ2VyIGNoaWxkcmVuLCB0aGUgZXhwZXJpbWVudGVyIHJlYWQgYWxsIHF1ZXN0aW9ucyBvdXQgbG91ZCBhbmQgY2hpbGRyZW4gcmVzcG9uZGVkIHZlcmJhbGx5LiAKClRoZSAyMCBtZW50YWwgY2FwYWNpdGllcyB3ZXJlIGEgc3Vic2V0IG9mIHRoZSA0MCBpdGVtcyB1c2VkIGluIFN0dWR5IDEsIGNob3NlbiB0byBpbmNsdWRlIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucywgZW1vdGlvbmFsIGV4cGVyaWVuY2VzLCBwZXJjZXB0dWFsIGFiaWxpdGllcywgY29nbml0aXZlIHNraWxscywgY2FwYWNpdGllcyByZWxhdGVkIHRvIGF1dG9ub215IG9yIGFnZW5jeSwgYW5kIHNvY2lhbCBhYmlsaXRpZXM7IGFuZCB0byBpbmNsdWRlIHNvbWUgb2YgdGhlIHN0cm9uZ2VzdC1sb2FkaW5nIGl0ZW1zIGZvciBlYWNoIG9mIHRoZSB0aHJlZSBmYWN0b3JzIHVuY292ZXJlZCBhbW9uZyBhZHVsdHMgaW4gU3R1ZHkgMSAoc2VlIEZpZ3VyZSAxKS4gQXMgaW4gU3R1ZHkgMSwgZWFjaCBtZW50YWwgY2FwYWNpdHkgd2FzIGFzc29jaWF0ZWQgd2l0aCBhIHNob3J0LCBwcmVzZXQgZGVmaW5pdGlvbi4gQm90aCBvbGRlciBhbmQgeW91bmdlciBjaGlsZHJlbiB3ZXJlIGVuY291cmFnZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3R1ZHkgdG8gYXNrIHF1ZXN0aW9ucyBpZiB0aGV5IGRpZCBub3Qga25vdyB3aGF0IGEgd29yZCBtZWFudCwgaW4gd2hpY2ggY2FzZSB0aGV5IHdlcmUgZ2l2ZW4gdGhlc2UgZGVmaW5pdGlvbnMuIChBZHVsdHMgZGlkIG5vdCBoYXZlIGFjY2VzcyB0byB0aGVzZSBkZWZpbml0aW9ucy4pCgpBZnRlciBjb21wbGV0aW5nIHRoZSAyMCBxdWVzdGlvbnMgYWJvdXQgbWVudGFsIGNhcGFjaXRpZXMsIGZvciBhIHN1YnNldCBvZiBwYXJ0aWNpcGFudHMgd2UgYWxzbyBhc2tlZCB0d28gYWRkaXRpb25hbCBxdWVzdGlvbnM6ICJJcyBhIFt0YXJnZXRdIG1hZGUgb3V0IG9mIG1ldGFsPyIgYW5kICJDYW4gYSBbdGFyZ2V0XSBiZSB0dXJuZWQgb24gYW5kIG9mZj8iIFRoZXNlIHF1ZXN0aW9ucyB3ZXJlIGFsd2F5cyBhc2tlZCBsYXN0LCBhbmQgd2VyZSBub3QgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgaW4gYW55IG9mIG91ciBwcmltYXJ5IGFuYWx5c2VzLiBTZWUgU09NIGZvciBhbiBhbmFseXNpcyBvZiByZXNwb25zZXMgdG8gdGhlc2UgcXVlc3Rpb25zLgoKIyMjIERhdGEgcHJvY2Vzc2luZwoKV2UgcGxhbm5lZCB0byBkcm9wIHRyaWFscyB3aXRoIHJlc3BvbnNlIHRpbWVzIHRoYXQgd2VyZSBmYXN0ZXIgdGhhbiBhIHByZXNldCBjcml0ZXJpb24gb2YgMjUwbXMsIGJ1dCB0aGVyZSB3ZXJlIG5vbmUgYW1vbmcgY2hpbGRyZW4sIGFuZCB3ZSBmYWlsZWQgdG8gcmVjb3JkIHJlc3BvbnNlIHRpbWVzIGFtb25nIGFkdWx0cy4gQXMgaW4gU3R1ZHkgMSwgd2UgcmV0YWluZWQgcGFydGljaXBhbnRzIHJlZ2FyZGxlc3Mgb2Ygc2tpcHBlZCB0cmlhbHMuIE92ZXJhbGwsIG5vbmUgb2YgYWR1bHRzIG9yIG9sZGVyIGNoaWxkcmVuJ3MgdHJpYWxzLCBhbmQgb25seSBgciByb3VuZChzdW0oaXMubmEoZDJfNDZfd2lkZSkpL3N1bSghaXMubmEoZDJfNDZfd2lkZSkpKjEwMCwgMilgJSBvZiB5b3VuZ2VyIGNoaWxkcmVuJ3MgdHJpYWxzIChfbl89YHIgc3VtKGlzLm5hKGQyXzQ2X3dpZGUpKWApIHdlcmUgbWlzc2luZyBkYXRhLgoKRm9yIG91ciBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzZXMsIHdlIGxvb2tlZCBhdCBlYWNoIGdyb3VwIG9mIHBhcnRpcGFudHMgKGFkdWx0cywgb2xkZXIgY2hpbGRyZW4sIGFuZCB5b3VuZ2VyIGNoaWxkcmVuKSBzZXBhcmF0ZWx5LCBiZWNhdXNlIEVGQSBpcyBhIGdyb3VwLWxldmVsIGFuYWx5c2lzIG9mIHRoZSBjb25zZW5zdWFsIGNvbmNlcHR1YWwgc3RydWN0dXJlIGFuZCBpcyBub3QgZGVzaWduZWQgdG8gbW9kZWwgY29udGludW91cyBwYXJ0aWNpcGFudC1sZXZlbCB2YXJpYWJsZXMgbGlrZSBleGFjdCBhZ2UuIE91ciBnb2FsIHdpdGggdGhlc2UgYW5hbHlzZXMgd2FzIHRvIGV4YW1pbmUgZGlzY3JldGUg4oCcc25hcHNob3Rz4oCdIG9mIHRoaXMgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgYXQgdHdvIHBvaW50cyBpbiB0aGlzIGNvbnRpbnVvdXMgZGV2ZWxvcG1lbnRhbCB0cmFqZWN0b3J5LgoKIyMgUmVzdWx0cwoKIyMjIENvbmNlcHR1YWwgc3RydWN0dXJlOiBBZHVsdHMKCmBgYHtyfQojIGltcGxlbWVudCAzIGZhY3RvciByZXRlbnRpb24gcHJvdG9jb2xzCm5mYWN0X3Bhcl9kMl9hZCA8LSBmYS5wYXJhbGxlbChkMl9hZF93aWRlX2ksIGNvciA9IGNob3Nlbl9jb3IsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0gPSBjaG9zZW5fZm0pJG5mYWN0Cm5mYWN0X2JpY19kMl9hZCA8LSB2c3MoZDJfYWRfd2lkZV9pLCBjb3IgPSBjaG9zZW5fY29yLCByb3RhdGUgPSBjaG9zZW5fcm90LCAKICAgICAgICAgICAgICAgICAgICAgICBmbSA9IGNob3Nlbl9mbSkkdnNzLnN0YXRzJEJJQyAlPiUgd2hpY2gubWluKCkKbmZhY3Rfd2RtX2QyX2FkIDwtIHJldGVuX2Z1bihkMl9hZF93aWRlX2ksIHJvdF90eXBlID0gY2hvc2VuX3JvdCkKCmNhdCgiUGFyYWxsZWwgYW5hbHlzaXM6ICIsIG5mYWN0X3Bhcl9kMl9hZCwKICAgICJcbk1pbmltaXppbmcgQklDOiAiLCBuZmFjdF9iaWNfZDJfYWQsCiAgICAiXG5XZWlzbWFuIGV0IGFsLjogIiwgbmZhY3Rfd2RtX2QyX2FkKQpgYGAKCmBgYHtyfQplZmFfNF9kMl9hZCA8LSBmYV9mdW4oZDJfYWRfd2lkZV9pLCA0KQpgYGAKCkFzIGluIFN0dWR5IDEsIHR3byBvciBvdXIgdGhyZWUgbWV0aG9kcyBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgZmFjdG9ycyB0byByZXRhaW4gKGluIHRoaXMgY2FzZSwgcGFyYWxsZWwgYW5hbHlzaXMgYW5kIFdlaXNtYW4gZXQgYWwuJ3MgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSkgc3VnZ2VzdGVkIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzLiAoTWluaW1pemluZyBCSUMgc3VnZ2VzdGVkIHJldGFpbmluZyBmb3VyIGZhY3RvcnMsIGJ1dCB0aGUgZm91cnRoIGZhY3RvciB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igb25seSBgciB0b3Bfbl9kb21DYXAoZWZhXzRfZDJfYWQsIDIwLCAiRjQiLCAicG9zIikgJT4lIGxlbmd0aCgpYCBtZW50YWwgY2FwYWNpdHk6IGByIHRvcF9uX2RvbUNhcChlZmFfNF9kMl9hZCwgMjAsICJGNCIsICJwb3MiKWA7IHNlZSBTT00uKQoKYGBge3J9CmVmYV8zX2QyX2FkIDwtIGZhX2Z1bihkMl9hZF93aWRlX2ksIDMpCmVmYV8zX3Bsb3RfZDJfYWQgPC0gaGVhdG1hcF9mdW4oZWZhXzNfZDJfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKSArCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiQWR1bHRzIChuPSIsIG5yb3coZDJfYWRfd2lkZV9pKSwgIikiKSkgKwogIGd1aWRlcyhmaWxsID0gIm5vbmUiKQpgYGAKCkFzIGV4cGVjdGVkLCB0aGUgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgcmV2ZWFsZWQgYnkgdGhpcyBhbmFseXNpcyBhbW9uZyBhZHVsdHMgd2FzIGNoYXJhY3Rlcml6ZWQgYnkgYSB0aHJlZS13YXkgZGlzdGluY3Rpb24gYmV0d2VlbiBfQk9EWV8gKGZpcnN0IGZhY3RvciwgYHIgcm91bmQoZWZhXzNfZDJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiksIF9IRUFSVF8gKGZpcnN0IGZhY3RvciwgYHIgcm91bmQoZWZhXzNfZDJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiBzaGFyZWQgdmFyaWFuY2UpLCBhbmQgX01JTkRfIChmaXJzdCBmYWN0b3IsIGByIHJvdW5kKGVmYV8zX2QyX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2Ygc2hhcmVkIHZhcmlhbmNlKS4gU2VlIEZpZ3VyZSA1LCBQYW5lbCBELgoKVGhpcyBzdWdnZXN0cyB0aGF0IG91ciBtb2RpZmllZCBjaGlsZC1mcmllbmRseSBwYXJhZGlnbSB3YXMgdmFsaWQ6IFVzaW5nIGEgc2hvcnRlciBsaXN0IG9mIGl0ZW1zIGFuZCBhIHdpZGVyIHJhbmdlIG9mIHRhcmdldCBjaGFyYWN0ZXJzIGVsaWNpdGVkIHRoZSBzYW1lIGludHVpdGl2ZSBvbnRvbG9neSBvZiBtZW50YWwgbGlmZSwgYW1vbmcgVVMgYWR1bHRzLCB0aGF0IHdhcyByZXZlYWxlZCBpbiBTdHVkeSAxIGFuZCBpbiBXZWlzbWFuIGV0IGFsLidzICgyMDE3KSBwcmV2aW91cyB3b3JrLiAKCiMjIyBDb25jZXB0dWFsIHN0cnVjdHVyZTogT2xkZXIgY2hpbGRyZW4gKDctOXkpCgpgYGB7cn0KIyBpbXBsZW1lbnQgMyBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scwpuZmFjdF9wYXJfZDJfNzkgPC0gZmEucGFyYWxsZWwoZDJfNzlfd2lkZV9pLCBjb3IgPSBjaG9zZW5fY29yLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtID0gY2hvc2VuX2ZtKSRuZmFjdApuZmFjdF9iaWNfZDJfNzkgPC0gdnNzKGQyXzc5X3dpZGVfaSwgY29yID0gY2hvc2VuX2Nvciwgcm90YXRlID0gY2hvc2VuX3JvdCwgCiAgICAgICAgICAgICAgICAgICAgICAgZm0gPSBjaG9zZW5fZm0pJHZzcy5zdGF0cyRCSUMgJT4lIHdoaWNoLm1pbigpCm5mYWN0X3dkbV9kMl83OSA8LSByZXRlbl9mdW4oZDJfNzlfd2lkZV9pLCByb3RfdHlwZSA9IGNob3Nlbl9yb3QpCgpjYXQoIlBhcmFsbGVsIGFuYWx5c2lzOiAiLCBuZmFjdF9wYXJfZDJfNzksCiAgICAiXG5NaW5pbWl6aW5nIEJJQzogIiwgbmZhY3RfYmljX2QyXzc5LAogICAgIlxuV2Vpc21hbiBldCBhbC46ICIsIG5mYWN0X3dkbV9kMl83OSkKYGBgCgpgYGB7cn0KZWZhXzNfZDJfNzkgPC0gZmFfZnVuKGQyXzc5X3dpZGVfaSwgMykKCmVmYV8zX3Bsb3RfZDJfNzkgPC0gaGVhdG1hcF9mdW4oZWZhXzNfZDJfNzksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKSArCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiT2xkZXIgY2hpbGRyZW4gKDctOXksIG49IiwgbnJvdyhkMl83OV93aWRlX2kpLCAiKSIpKSArCiAgZ3VpZGVzKGZpbGwgPSAibm9uZSIpCmBgYAoKYGBge3J9CmNvbmdfZWZhXzNfZDJfYWRfNzkgPC0gZmEuY29uZ3J1ZW5jZShlZmFfM19kMl83OSRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV8zX2QyX2FkJGxvYWRpbmdzKQpgYGAKCk91ciB0aHJlZSBtZXRob2RzIGZvciBkZXRlcm1pbmluZyBob3cgbWFueSBmYWN0b3JzIHRvIHJldGFpbiBhbGwgc3VnZ2VzdGVkIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzLiBBcyBpbiBTdHVkeSAxLCB0aGUgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgcmV2ZWFsZWQgYnkgdGhpcyBhbmFseXNpcyBhbW9uZyA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIHdhcyB2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBvZiBhZHVsdHMsIGFnYWluIGNoYXJhY3Rlcml6ZWQgYnkgYSB0aHJlZS13YXkgZGlzdGluY3Rpb24gYmV0d2VlbiBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8uCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucy4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgY29uZmlybWVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIF9CT0RZXyBmYWN0b3IgKGNvc2luZSBzaW1pbGFyaXR5IHdpdGggX0JPRFlfOiBgciBjb25nX2VmYV8zX2QyX2FkXzc5WyJGMSIsICJGMSJdYDsgd2l0aCBfSEVBUlRfOiBgciBjb25nX2VmYV8zX2QyX2FkXzc5WyJGMSIsICJGMiJdYDsgd2l0aCBfTUlORF86IGByIGNvbmdfZWZhXzNfZDJfYWRfNzlbIkYxIiwgIkYzIl1gKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV8zX2QyXzc5LCA0LCAiRjEiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfM19kMl83OSRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMSJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLiAKClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGNvbmZpcm1lZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBfSEVBUlRfIGZhY3RvciAoY29zaW5lIHNpbWlsYXJpdHkgd2l0aCBfSEVBUlRfOiBgciBjb25nX2VmYV8zX2QyX2FkXzc5WyJGMiIsICJGMiJdYDsgd2l0aCBfQk9EWV86IGByIGNvbmdfZWZhXzNfZDJfYWRfNzlbIkYyIiwgIkYxIl1gOyB3aXRoIF9NSU5EXzogYHIgY29uZ19lZmFfM19kMl9hZF83OVsiRjIiLCAiRjMiXWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhXzNfZDJfNzksIDQsICJGMiIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV8zX2QyXzc5JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uIAoKVGhlIHRoaXJkIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcy4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgY29uZmlybWVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIF9NSU5EXyBmYWN0b3IgKGNvc2luZSBzaW1pbGFyaXR5IHdpdGggX01JTkRfOiBgciBjb25nX2VmYV8zX2QyX2FkXzc5WyJGMyIsICJGMyJdYDsgd2l0aCBfSEVBUlRfOiBgciBjb25nX2VmYV8zX2QyX2FkXzc5WyJGMyIsICJGMiJdYDsgd2l0aCBfQk9EWV86IGByIGNvbmdfZWZhXzNfZDJfYWRfNzlbIkYzIiwgIkYxIl1gKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV8zX2QyXzc5LCA0LCAiRjMiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfM19kMl83OSRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMyJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLiAoU2VlIEZpZ3VyZSA1LCBQYW5lbCBDLCBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncy4pCgpXZSBjb25zaWRlciB0aGlzIHRvIGJlIGEgY2xvc2UgY29uY2VwdHVhbCByZXBsaWNhdGlvbiBvZiBvdXIgU3R1ZHkgMSBmaW5kaW5ncywgc3VnZ2VzdGluZyB0aGF0IGJ5IHRoZSBhZ2Ugb2YgNy05IHllYXJzLCB0aGlzIHRocmVlLXBhcnQgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgaXMgc3RhYmxlIGFuZCByb2J1c3QgdG8gYSByYW5nZSBvZiBleHBlcmltZW50YWwgY29uZGl0aW9ucy4KCiMjIyBDb25jZXB0dWFsIHN0cnVjdHVyZTogWW91bmdlciBjaGlsZHJlbiAoNC02eSkKCmBgYHtyfQojIGltcGxlbWVudCAzIGZhY3RvciByZXRlbnRpb24gcHJvdG9jb2xzCm5mYWN0X3Bhcl9kMl80NiA8LSBmYS5wYXJhbGxlbChkMl80Nl93aWRlX2ksIGNvciA9IGNob3Nlbl9jb3IsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0gPSBjaG9zZW5fZm0pJG5mYWN0Cm5mYWN0X2JpY19kMl80NiA8LSB2c3MoZDJfNDZfd2lkZV9pLCBjb3IgPSBjaG9zZW5fY29yLCByb3RhdGUgPSBjaG9zZW5fcm90LCAKICAgICAgICAgICAgICAgICAgICAgICBmbSA9IGNob3Nlbl9mbSkkdnNzLnN0YXRzJEJJQyAlPiUgd2hpY2gubWluKCkKbmZhY3Rfd2RtX2QyXzQ2IDwtIHJldGVuX2Z1bihkMl80Nl93aWRlX2ksIHJvdF90eXBlID0gY2hvc2VuX3JvdCkKCmNhdCgiUGFyYWxsZWwgYW5hbHlzaXM6ICIsIG5mYWN0X3Bhcl9kMl80NiwKICAgICJcbk1pbmltaXppbmcgQklDOiAiLCBuZmFjdF9iaWNfZDJfNDYsCiAgICAiXG5XZWlzbWFuIGV0IGFsLjogIiwgbmZhY3Rfd2RtX2QyXzQ2KQpgYGAKCmBgYHtyfQplZmFfMV9kMl80NiA8LSBmYV9mdW4oZDJfNDZfd2lkZV9pLCAxKQpgYGAKCk91ciB0aHJlZSBtZXRob2RzIGZvciBkZXRlcm1pbmluZyBob3cgbWFueSBmYWN0b3JzIHRvIHJldGFpbiBlYWNoIHN1Z2dlc3RlZCByZXRhaW5pbmcgZGlmZmVyZW50IG51bWJlcnMgb2YgZmFjdG9yczogV2Vpc21hbiBldCBhbC4ncyBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhIHN1Z2dlc3RlZCByZXRhaW5pbmcgYHIgbmZhY3Rfd2RtX2QyXzQ2YCBmYWN0b3JzLCBwYXJhbGxlbCBhbmFseXNpcyBzdWdnZXN0ZWQgcmV0YWluaW5nIGByIG5mYWN0X3Bhcl9kMl80NmAgZmFjdG9ycywgYW5kIG1pbmltaXppbmcgQklDIHN1Z2dlc3RlZCBhIG51bGwsIGByIG5mYWN0X2JpY19kMl80NmAtZmFjdG9yIHNvbHV0aW9uLiBIZXJlIHdlIHByZXNlbnQgYm90aCB0aGUgdHdvLSBhbmQgdGhyZWUtZmFjdG9yIHNvbHV0aW9ucy4gKFNlZSBTT00gZm9yIGZhY3RvciBsb2FkaW5ncyBvbiB0aGUgb25lICJmYWN0b3IiIGluIHRoZSBudWxsLCBvbmUtZmFjdG9yIHNvbHV0aW9uLCB3aGljaCB5aWVsZGVkIHBhcnRpY3VsYXJseSBzdHJvbmcgbG9hZGluZ3MgZm9yIHNvY2lhbC1lbW90aW9uYWwgZXhwZXJpZW5jZXMgYW5kIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucywgc3VjaCBhcyBgciB0b3Bfbl9kb21DYXAoZWZhXzFfZDJfNDYsIDQsICJGMSIpYC4pCgojIyMjIFRocmVlLWZhY3RvciBzb2x1dGlvbgoKYGBge3J9CmVmYV8zX2QyXzQ2IDwtIGZhX2Z1bihkMl80Nl93aWRlX2ksIDMpCgplZmFfM19wbG90X2QyXzQ2IDwtIGhlYXRtYXBfZnVuKGVmYV8zX2QyXzQ2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGMoIkJPRFkqIiwgIk1JTkQiLCAiSEVBUlQqIikpICsKICBsYWJzKHRpdGxlID0gcGFzdGUwKCJZb3VuZXIgY2hpbGRyZW4gKDQtNnksIG49IiwgbnJvdyhkMl83OV93aWRlX2kpLCAiKTogMy1mYWN0b3Igc29sdXRpb24iKSkgKwogIGd1aWRlcyhmaWxsID0gIm5vbmUiKQpgYGAKCmBgYHtyfQpjb25nX2VmYV8zX2QyX2FkXzQ2IDwtIGZhLmNvbmdydWVuY2UoZWZhXzNfZDJfNDYkbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfM19kMl9hZCRsb2FkaW5ncykKYGBgCgpJbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IFdlaXNtYW4gZXQgYWwuJ3MgcmV0ZW50aW9uIGNyaXRlcmlhLCB0aGUgZmlyc3QgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zLCBhcyB3ZWxsIGFzIHNvbWUgcG9zaXRpdmUgZW1vdGlvbnMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGluZGljYXRlZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBfQk9EWV8gZmFjdG9yIChjb3NpbmUgc2ltaWxhcml0eSB3aXRoIF9CT0RZXzogYHIgY29uZ19lZmFfM19kMl9hZF80NlsiRjEiLCAiRjEiXWApLCBidXQgd2FzIGFsc28gcXVpdGUgc2ltaWxhciB0byBhZHVsdHMnIF9IRUFSVF8gZmFjdG9yIChjb3NpbmUgc2ltaWxhcml0eSB3aXRoIF9IRUFSVF86IGByIGNvbmdfZWZhXzNfZDJfYWRfNDZbIkYxIiwgIkYyIl1gOyB3aXRoIF9NSU5EXzogYHIgY29uZ19lZmFfM19kMl9hZF80NlsiRjEiLCAiRjMiXWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhXzNfZDJfNDYsIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV8zX2QyXzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uIAoKVGhlIHNlY29uZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMsIGFzIHdlbGwgYXMgb25lIGNvbXBsZXggbmVnYXRpdmUgZW1vdGlvbiAoX2ZlZWwgZ3VpbHR5XykuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGNvbmZpcm1lZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBfTUlORF8gZmFjdG9yIChjb3NpbmUgc2ltaWxhcml0eSB3aXRoIF9NSU5EXzogYHIgY29uZ19lZmFfM19kMl9hZF80NlsiRjIiLCAiRjMiXWA7IHdpdGggX0hFQVJUXzogYHIgY29uZ19lZmFfM19kMl9hZF80NlsiRjIiLCAiRjIiXWA7IHdpdGggX0JPRFlfOiBgciBjb25nX2VmYV8zX2QyX2FkXzQ2WyJGMiIsICJGMSJdYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfM19kMl80NiwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhXzNfZDJfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMsIHdpdGggcGFydGljdWxhcmx5IHN0cm9uZyBsb2FkaW5ncyBmb3IgcG9zaXRpdmUgZW1vdGlvbnMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGluZGljYXRlZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBfSEVBUlRfIGZhY3RvciAoY29zaW5lIHNpbWlsYXJpdHkgd2l0aCBfSEVBUlRfOiBgciBjb25nX2VmYV8zX2QyX2FkXzQ2WyJGMyIsICJGMiJdYCksIGJ1dCBhbHNvIHF1aXRlIHNpbWlsYXIgdG8gYWR1bHRzJyBfQk9EWV8gZmFjdG9yIChjb3NpbmUgc2ltaWxhcml0eSB3aXRoIF9CT0RZXzogYHIgY29uZ19lZmFfM19kMl9hZF80NlsiRjMiLCAiRjEiXWA7IHdpdGggX01JTkRfOiBgciBjb25nX2VmYV8zX2QyX2FkXzQ2WyJGMyIsICJGMyJdYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfM19kMl80NiwgNCwgIkYzIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhXzNfZDJfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gKFNlZSBGaWd1cmUgNSwgUGFuZWwgQiwgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MuKQoKV2Ugd291bGQgZGVzY3JpYmUgdGhpcyBjb25jZXB0dWFsIHN0cnVjdHVyZSBhcyByZW1pbmlzY2VudCBvZiB0aGUgX0JPRFlfLV9IRUFSVF8tX01JTkRfIHN0cnVjdHVyZSBmb3VuZCBhbW9uZyBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBidXQgbm90IGFzIGZ1bGx5ICJhZHVsdC1saWtlLiIgSW4gcGFydGljdWxhciwgaW4gdGhpcyBzdHJ1Y3R1cmUsIHRoZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBfQk9EWV8gYW1vbmcgb2xkZXIgY2hpbGRyZW4gYW5kIGFkdWx0cyBhcmUgbm90IGFzIGNsZWFybHkgZGlmZmVyZW50aWF0ZWQgZnJvbSB0aGUgZW1vdGlvbmFsIGV4cGVyaWVuY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgX0hFQVJUXy4gSW5kZWVkLCBpdCBpdCBub3QgY2xlYXIgdGhhdCBfQk9EWV8gdnMuIF9IRUFSVF8gaXMgdGhlIG1vc3Qgc2FsaWVudCBkaXN0aW5jdGlvbiBhbW9uZyB0aGUgZmlyc3QgYW5kIHRoaXJkIGZhY3RvcnMgaW4gdGhpcyBzb2x1dGlvbjogQSBjbGVhbmVyIGRlc2NyaXB0aW9uIG9mIHRoZXNlIGZhY3RvcnMgbWlnaHQgYmUgbmVnYXRpdmVseS12YWxlbmNlZCBleHBlcmllbmNlcyB2cy4gcG9zaXRpdmVseS12YWxlbmNlZCBleHBlcmllbmNlcy4gCgojIyMjIFR3by1mYWN0b3Igc29sdXRpb24KCmBgYHtyfQplZmFfMl9kMl80NiA8LSBmYV9mdW4oZDJfNDZfd2lkZV9pLCAyKQoKZWZhXzJfcGxvdF9kMl80NiA8LSBoZWF0bWFwX2Z1bihlZmFfMl9kMl80NiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBjKCJCT0RZLUhFQVJUIiwgIk1JTkQiKSkgKwogIGxhYnModGl0bGUgPSBwYXN0ZTAoIllvdW5lciBjaGlsZHJlbiAoNC02eSwgbj0iLCBucm93KGQyXzc5X3dpZGVfaSksICIpOiAyLWZhY3RvciBzb2x1dGlvbiIpKQpgYGAKCmBgYHtyfQpjb25nX2VmYV8yX2QyX2FkXzQ2IDwtIGZhLmNvbmdydWVuY2UoZWZhXzJfZDJfNDYkbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfM19kMl9hZCRsb2FkaW5ncykKYGBgCgpJbiB0aGUgcm90YXRlZCB0d28tZmFjdG9yIHNvbHV0aW9uIHN1Z2dlc3RlZCBieSBwYXJhbGxlbCBhbmFseXNpcywgdGhlIGZpcnN0IGZhY3RvciBlbmNvbXBhc3NlZCBib3RoIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyBhbmQgZW1vdGlvbnMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGluZGljYXRlZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBfQk9EWV8gZmFjdG9yIChjb3NpbmUgc2ltaWxhcml0eSB3aXRoIF9CT0RZXzogYHIgY29uZ19lZmFfMl9kMl9hZF80NlsiRjEiLCAiRjEiXWApLCBidXQgd2FzIGFsc28gcXVpdGUgc2ltaWxhciB0byBhZHVsdHMnIF9IRUFSVF8gZmFjdG9yIChjb3NpbmUgc2ltaWxhcml0eSB3aXRoIF9IRUFSVF86IGByIGNvbmdfZWZhXzJfZDJfYWRfNDZbIkYxIiwgIkYyIl1gOyB3aXRoIF9NSU5EXzogYHIgY29uZ19lZmFfMl9kMl9hZF80NlsiRjEiLCAiRjMiXWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhXzJfZDJfNDYsIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV8yX2QyXzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0d28tZmFjdG9yIHNvbHV0aW9uLiAKClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzLCBhcyB3ZWxsIGFzIG9uZSBjb21wbGV4IG5lZ2F0aXZlIGVtb3Rpb24gKF9mZWVsIGd1aWx0eV8pLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgX01JTkRfIGZhY3RvciAoY29zaW5lIHNpbWlsYXJpdHkgd2l0aCBfTUlORF86IGByIGNvbmdfZWZhXzJfZDJfYWRfNDZbIkYyIiwgIkYzIl1gOyB3aXRoIF9IRUFSVF86IGByIGNvbmdfZWZhXzJfZDJfYWRfNDZbIkYyIiwgIkYxIl1gOyB3aXRoIF9CT0RZXzogYHIgY29uZ19lZmFfMl9kMl9hZF80NlsiRjIiLCAiRjEiXWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhXzJfZDJfNDYsIDQsICJGMiIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV8yX2QyXzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uIChTZWUgRmlndXJlIDUsIFBhbmVsIEEsIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzLikKCkluIHJlbGF0aW9uIHRvIHRoZSBfQk9EWV8tX0hFQVJULV9NSU5EXyBzdHJ1Y3R1cmUgZm91bmQgYW1vbmcgb2xkZXIgY2hpbGRyZW4gYW5kIGFkdWx0cywgd2Ugd291bGQgZGVzY3JpYmUgdGhpcyB0d28tZmFjdG9yIHN0cnVjdHVyZSBhcyBiZWluZyBhbmNob3JlZCBieSBhIGNvbnRyYXN0IGJldHdlZW4gdGhlIGNvZ25pdGl2ZSBjYXBhY2l0aWVzIG9mIHRoZSBfTUlORF8gdnMuIGEgc2V0IG9mIHdhcm1lciwgbW9yZSB2aXNlcmNhbCBleHBlcmllbmNlcyB0aGF0IGNvbnN0aXR1dGUgYSBtb3JlIGludGVncmF0ZWQgcmVwcmVzZW50YXRpb24gb2YgX0JPRFktSEVBUlRfLgoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMX0KZmlnMDVfcGxvdHMgPC0gcGxvdF9ncmlkKGVmYV8yX3Bsb3RfZDJfNDYsIGVmYV8zX3Bsb3RfZDJfNDYsIAogICAgICAgICAgICAgICAgICAgICAgICAgZWZhXzNfcGxvdF9kMl83OSwgZWZhXzNfcGxvdF9kMl9hZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkEiLCAiQiIsICJDIiwgIkQiKSkKZmlnMDVfd2l0aF9jYXB0aW9uIDwtIGFkZF9zdWIoZmlnMDVfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNTogRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzIHJlc3VsdHMgZm9yIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4gKEEtQiksIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gKEIpIGFuZCBhZHVsdHMgKEMpIGluIFN0dWR5IDIsIGluIHdoaWNoIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgMjAgbWVudGFsIGNhcGFjaXRpZXMgZm9yIG9uZSBvZiBuaW5lIHRhcmdldCBjaGFyYWN0ZXJzOiBhIGNvbXB1dGVyLCBhIHJvYm90LCBhIGRvbGwsIGEgdGVkZHkgYmVhciwgYSBiZWV0bGUsIGEgYmlyZCwgYSBtb3VzZSwgYSBnb2F0LCBvciBhbiBlbGVwaGFudC4gRm9yIHlvdW5nZXIgY2hpbGRyZW4sIHdlIGluY2x1ZGUgYm90aCB0aGUgdHdvLWZhY3RvciBzb2x1dGlvbiBzdWdnZXN0ZWQgYnkgcGFyYWxsZWwgYW5hbHlzaXMgKEEpIGFuZCB0aGUgdGhyZWUtZmFjdG9yIHNvbHV0aW9uIHN1Z2dlc3RlZCBieSBXZWlzbWFuIGV0IGFsLidzICgyMDE3KSBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhIChCKS4iLCAxNDMpLCB4ID0gMCwgaGp1c3QgPSAwKQpnZ2RyYXcoZmlnMDVfd2l0aF9jYXB0aW9uKQpgYGAKCiMjIyBBdHRyaWJ1dGlvbnMgb2YgbWVudGFsIGxpZmUKCkluIFN0dWR5IDEsIHdlIHNhdyB0aGF0IGV2ZW4gY2hpbGRyZW4gYXMgb2xkIGFzIDctOXnigJR3aG9zZSBjb25jZXB0dWFsIHN0cnVjdHVyZSBzZWVtZWQgdG8gYmUgcXVpdGUgc2ltaWxhciB0byB0aGF0IG9mIGFkdWx0cyfigJRub25ldGhlbGVzcyBkaWZmZXJlZCBmcm9tIGFkdWx0cyBpbiB0aGVpciBfYXBwbGljYXRpb25fIG9mIHRoaXMgY29uY2VwdCwgYXR0cmlidXRpbmcgZmFyIG1vcmUgb2YgdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdGhlIF9IRUFSVF8gdG8gYm90aCBiZWV0bGVzIGFuZCByb2JvdHMuIEhvdyBkbyBjaGlsZHJlbidzIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgY29tcGFyZSB0byBhZHVsdHMgZm9yIHRoZSBsYXJnZXIgc2V0IG9mIHRhcmdldCBjaGFyYWN0ZXJzIGluY2x1ZGVkIGluIFN0dWR5IDLigJRhbmQgd2hhdCBkb2VzIHRoaXMgYXNwZWN0IG9mIGNvbmNlcHR1YWwgZGV2ZWxvcG1lbnRhbCBsb29rIGxpa2UgZWFybGllciBpbiBkZXZlbG9wbWVudCAoNC02eSk/CgojIyMjIERpZmZlcmVuY2VzIGFjcm9zcyBhZ2UgZ3JvdXBzCgpgYGB7cn0KZDJfYWxsX3dpZGVfaSA8LSBkMl9hZF93aWRlX2kgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZF9jaGFyIikgJT4lCiAgZnVsbF9qb2luKGQyXzc5X3dpZGVfaSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oInN1YmlkX2NoYXIiKSkgJT4lCiAgZnVsbF9qb2luKGQyXzQ2X3dpZGVfaSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oInN1YmlkX2NoYXIiKSkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJzdWJpZF9jaGFyIikKYGBgCgpgYGB7cn0KZWZhXzNfZDJfNzlfcHJvamVjdF9zY29yZXMgPC0gcHJlZGljdChvYmplY3QgPSBlZmFfM19kMl9hZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlfd2lkZV9pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZC5kYXRhID0gZDJfYWRfd2lkZV9pKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZF9jaGFyIikgJT4lCiAgbXV0YXRlKHN1YmlkID0gZ3N1YigiXy4qJCIsICIiLCBzdWJpZF9jaGFyKSwKICAgICAgICAgY2hhcmFjdGVyID0gZ3N1YigiXi4qXyIsICIiLCBzdWJpZF9jaGFyKSwKICAgICAgICAgYWdlX2dyb3VwID0gImNoaWxkcmVuNzkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgLWMoc3ViaWQsIGNoYXJhY3Rlciwgc3ViaWRfY2hhciwgYWdlX2dyb3VwKSkgJT4lCiAgbXV0YXRlKGZhY3Rvcl9uYW1lID0gcmVjb2RlX2ZhY3RvcihmYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRjEiID0gIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkYyIiA9ICJIRUFSVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRjMiID0gIk1JTkQiKSkgJT4lCiAgYXJyYW5nZShzdWJpZF9jaGFyKQpgYGAKCmBgYHtyfQplZmFfM19kMl80Nl9wcm9qZWN0X3Njb3JlcyA8LSBwcmVkaWN0KG9iamVjdCA9IGVmYV8zX2QyX2FkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkMl80Nl93aWRlX2ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkLmRhdGEgPSBkMl9hZF93aWRlX2kpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkX2NoYXIiKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBnc3ViKCJfLiokIiwgIiIsIHN1YmlkX2NoYXIpLAogICAgICAgICBjaGFyYWN0ZXIgPSBnc3ViKCJeLipfIiwgIiIsIHN1YmlkX2NoYXIpLAogICAgICAgICBhZ2VfZ3JvdXAgPSAiY2hpbGRyZW40NiIpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCAtYyhzdWJpZCwgY2hhcmFjdGVyLCBzdWJpZF9jaGFyLCBhZ2VfZ3JvdXApKSAlPiUKICBtdXRhdGUoZmFjdG9yX25hbWUgPSByZWNvZGVfZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMSIgPSAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRjIiID0gIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMyIgPSAiTUlORCIpKSAlPiUKICBhcnJhbmdlKHN1YmlkX2NoYXIpCmBgYAoKRm9sbG93aW5nIFN0dWR5IDEsIHdlIHByb2plY3RlZCBhbGwgb2YgY2hpbGRyZW4ncyByZXNwb25zZXMgaW50byB0aGUgZmFjdG9yIHNwYWNlIGRlZmluZWQgYnkgYWR1bHRzIChzdGFuZGFyZGl6ZWQgaW4gdGVybXMgb2YgYWR1bHRzJyByZXNwb25zZXMpLCBhbmQgZXhhbWluZWQgZmFjdG9yIHNjb3JlcyBieSBhZ2UgZ3JvdXAgKGFnYWluLCB1c2luZyB0aGUgbWV0aG9kIGFydGljdWxhdGVkIGJ5IHRlbiBCZXJnZSBldCBhbC4sIDE5OTkpLiBBcyBpbiBTdHVkeSAxLCB0aGlzIHlpZWxkZWQgdGhyZWUgc2NvcmVzIGZvciBlYWNoIHBhcnRpY2lwYW50LCBjb3JyZXNwb25kaW5nLCBpbiBwcmluY2lwbGUsIHRvIGhvbGlzdGljIGp1ZGdtZW50cyBvZiB0aGUgc29jaWFsLWVtb3Rpb25hbCwgcGh5c2lvbG9naWNhbCwgYW5kIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyBvZiB0aGUgdGFyZ2V0IGNoYXJhY3RlciB0aGUgcGFydGljaXBhbnQgZXZhbHVhdGVkLiAoTm90ZSB0aGF0IGVhY2ggb2YgdGhlc2UgdGhyZWUgc2NvcmVzIHRha2VzIGludG8gYWNjb3VudCBhZHVsdCBmYWN0b3IgbG9hZGluZ3MgZm9yIGFsbCAyMCBtZW50YWwgY2FwYWNpdGllcywgYXMgc2hvd24gaW4gRmlndXJlIDUsIFBhbmVsIEQuKSAKClRoaXMgYWxsb3dlZCB1cyB0byBleGFtaW5lIHRoZSBlZmZlY3RzIG9mIGFnZSBncm91cCAoeW91bmdlciBjaGlsZHJlbiwgb2xkZXIgY2hpbGRyZW4sIGFkdWx0cyksIGZhY3RvciAoX0JPRFlfLCBfSEVBUlRfLCBfTUlORF8pLCBhbmQgdGFyZ2V0IGNoYXJhY3RlciBvbiB0aGVzZSBzY29yZXMgdmlhIG1peGVkIGVmZmVjdHMgQmF5ZXNpYW4gcmVncmVzc2lvbi4gQXMgaW4gU3R1ZHkgMSwgZmFjdG9yIHdhcyBlZmZlY3QtY29kZWQsIGFuZCBhZ2UgZ3JvdXAgd2FzIGR1bW15LWNvZGVkIHdpdGggYWR1bHRzIGFzIHRoZSBiYXNlbGluZSwgdG8gYXNzZXNzIHdoZXRoZXIgY2hpbGRyZW4gaW4gZWFjaCBhZ2UgZ3JvdXAgd2VyZSAiYWR1bHQtbGlrZSIgaW4gdGhlaXIgYXNzZXNzbWVudHMuIFRvIGV4YW1pbmUgZGlmZmVyZW5jZXMgaW4gbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyB0byBkaWZmZXJlbnQgdGFyZ2V0IGNoYXJhY3RlcnMsIHdlIGNvZGVkIGVhY2ggY2hhcmFjdGVyIGFzIGVpdGhlciAiYW5pbWF0ZSIgKGVsZXBoYW50LCBnb2F0LCBtb3VzZSwgYmlyZCwgYmVldGxlKSBvciAiaW5hbmltYXRlIiAoY29tcHV0ZXIsIHJvYm90LCBkb2xsLCB0ZWRkeSBiZWFyKSwgYW5kIGluY2x1ZGVkIGFuaW1hY3kgc3RhdHVzIChlZmZlY3QtY29kZWQpIGFzIGEgZml4ZWQgZWZmZWN0IGluIG91ciByZWdyZXNzaW9uIG1vZGVsLiBXZSBpbmNsdWRlZCBpbnRlcmNlcHRzIGFuZCBzbG9wZXMgZm9yIGluZGl2aWR1YWwgY2hhcmFjdGVycyBhcyByYW5kb20gZWZmZXRzIGluIG91ciBtb2RlbCwgYWxvbmcgd2l0aCBpbnRlcmNlcHRzIGZvciBpbmRpdmlkdWFsIHBhcnRpY2lwYW50cy5bXjFdCgpbXjFdOiBXZSBub3RlcyB0aGF0IHRoZSBjb21wbGV4aXRpZXMgb2YgdGhlIGRlc2lnbiBvZiBTdHVkeSAyIGNvdWxkIGxlbmQgdGhlbXNlbHZlcyB0byBtb3JlIGNvbXBsZXggbW9kZWxzIHRoYW4gd2hhdCB3ZSBoYXZlIHByZXNlbnRlZCBoZXJlLCBhbmQgd2UgZW5jb3VyYWdlIHJlYWRlcnMgdG8gZXhhbWluZSBhIG1vZGVsIGluY2x1ZGluZyBtdWx0aXBsZSBjb21wYXJpc29ucyBiZXR3ZWVuIHNldHMgb2YgY2hhcmFjdGVycyAoZS5nLiwgbWFtbWFscyB2cy4gbm9uLW1hbW1hbHM7IHRlY2hub2xvZ2llcyB2cy4gdG95cykgcHJlc2VudGVkIGluIHRoZSBTT00uIEFsbCBvZiB0aGUgZWZmZWN0cyBkZXNjcmliZWQgYmVsb3cgYWxzbyBob2xkIHRydWUgaW4gdGhpcyBtb3JlIGNvbXBsZXggbW9kZWwuCgpUaGUgcmVzdWx0cyBvZiB0aGlzIG1vZGVsIGNhbiBiZSBmb3VuZCBpbiBUYWJsZSAzLiAKCmBgYHtyfQplZmFfM19zY29yZXNfZDJfYWxsIDwtIGVmYV8zX2QyX2FkJHNjb3JlcyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZF9jaGFyIikgJT4lCiAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIC1zdWJpZF9jaGFyKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBnc3ViKCJfY29tcHV0ZXIiLCAiIiwgc3ViaWRfY2hhciksCiAgICAgICAgIHN1YmlkID0gZ3N1YigiX3JvYm90IiwgIiIsIHN1YmlkKSwKICAgICAgICAgc3ViaWQgPSBnc3ViKCJfZG9sbCIsICIiLCBzdWJpZCksCiAgICAgICAgIHN1YmlkID0gZ3N1YigiX3RlZGR5X2JlYXIiLCAiIiwgc3ViaWQpLAogICAgICAgICBzdWJpZCA9IGdzdWIoIl9iZWV0bGUiLCAiIiwgc3ViaWQpLAogICAgICAgICBzdWJpZCA9IGdzdWIoIl9iaXJkIiwgIiIsIHN1YmlkKSwKICAgICAgICAgc3ViaWQgPSBnc3ViKCJfbW91c2UiLCAiIiwgc3ViaWQpLAogICAgICAgICBzdWJpZCA9IGdzdWIoIl9nb2F0IiwgIiIsIHN1YmlkKSwKICAgICAgICAgc3ViaWQgPSBnc3ViKCJfZWxlcGhhbnQiLCAiIiwgc3ViaWQpLAogICAgICAgICBjaGFyYWN0ZXIgPSBnc3ViKCJeLipfIiwgIiIsIHN1YmlkX2NoYXIpLAogICAgICAgICBhZ2VfZ3JvdXAgPSAiYWR1bHRzIiwKICAgICAgICAgZmFjdG9yX25hbWUgPSByZWNvZGVfZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMSIgPSAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRjIiID0gIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMyIgPSAiTUlORCIpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBmdWxsX2pvaW4oZWZhXzNfZDJfNzlfcHJvamVjdF9zY29yZXMgJT4lIAogICAgICAgICAgICAgIGxlZnRfam9pbihkMl83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZV9ncm91cCwgYWdlKSkpICU+JQogIGZ1bGxfam9pbihlZmFfM19kMl80Nl9wcm9qZWN0X3Njb3JlcyAlPiUgCiAgICAgICAgICAgICAgbGVmdF9qb2luKGQyXzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlX2dyb3VwLCBhZ2UpKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJiZWFyIiwgYXMuY2hhcmFjdGVyKGNoYXJhY3RlcikpIH4gInRlZGR5IGJlYXIiLCAKICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoY2hhcmFjdGVyKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJmYWN0b3IiKSwgY2hhcmFjdGVyLCBhZ2VfZ3JvdXApLCBmdW5zKGZhY3RvcikpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY29tcHV0ZXIiLCAicm9ib3QiLCAiZG9sbCIsICJ0ZWRkeSBiZWFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZSIsICJiaXJkIiwgIm1vdXNlIiwgImdvYXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWxlcGhhbnQiKSksCiAgICAgICAgIGFnZV9ncm91cCA9IGZhY3RvcihhZ2VfZ3JvdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjaGlsZHJlbjQ2IiwgImNoaWxkcmVuNzkiLCAiYWR1bHRzIikpKQoKZWZhXzNfc2NvcmVzX2Jvb3RfZDJfYWxsIDwtIGVmYV8zX3Njb3Jlc19kMl9hbGwgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBmYWN0b3IsIGZhY3Rvcl9uYW1lLCBjaGFyYWN0ZXIpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIikgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmNvbnRyYXN0cyhlZmFfM19zY29yZXNfZDJfYWxsJGNoYXJhY3RlcikgPC0gY2JpbmQoCiAgImFuaW1faW5hbiIgPSBjKC01LCAtNSwgLTUsIC01LCA0LCA0LCA0LCA0LCA0KSwKICAibWFtbV9ub25tIiA9IGMoMCwgMCwgMCwgMCwgLTMsIC0zLCAyLCAyLCAyKSwKICAiZWxlcF9nb21vIiA9IGMoMCwgMCwgMCwgMCwgMCwgMCwgLTEsIC0xLCAyKSwKICAiZ29hdF9tb3VzIiA9IGMoMCwgMCwgMCwgMCwgMCwgMCwgLTEsIDEsIDApLAogICJiaXJkX2JlZXQiID0gYygwLCAwLCAwLCAwLCAtMSwgMSwgMCwgMCwgMCksCiAgInRlY2hfdG95cyIgPSBjKDEsIDEsIC0xLCAtMSwgMCwgMCwgMCwgMCwgMCksCiAgInJvYm9fY29tcCIgPSBjKC0xLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwKICAidGVkZF9kb2xsIiA9IGMoMCwgMCwgLTEsIDEsIDAsIDAsIDAsIDAsIDApKQpjb250cmFzdHMoZWZhXzNfc2NvcmVzX2QyX2FsbCRhZ2VfZ3JvdXApIDwtIGNiaW5kKCJDSDQ2X0FEIiA9IGMoMSwgMCwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNINzlfQUQiID0gYygwLCAxLCAwKSkKY29udHJhc3RzKGVmYV8zX3Njb3Jlc19kMl9hbGwkZmFjdG9yX25hbWUpIDwtIGNiaW5kKCJIX0dNIiA9IGMoLTEsIDEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1fR00iID0gYygtMSwgMCwgMSkpCgojIGVmYV8zX3Njb3Jlc19yX2QyX2FsbCA8LSBicm0oc2NvcmUgfiBmYWN0b3JfbmFtZSAqIGFnZV9ncm91cCAqIGNoYXJhY3RlcgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoMXxzdWJpZCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZWZhXzNfc2NvcmVzX2QyX2FsbCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWQgPSAxMjM0NSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgc2F2ZVJEUyhlZmFfM19zY29yZXNfcl9kMl9hbGwsIGZpbGUgPSAiLi9icm1zX21vZGVscy9lZmFfM19zY29yZXNfcl9kMl9hbGwucmRzIikKCmVmYV8zX3Njb3Jlc19yX2QyX2FsbCA8LSByZWFkUkRTKGZpbGUgPSAiLi9icm1zX21vZGVscy9lZmFfM19zY29yZXNfcl9kMl9hbGwucmRzIikKIyBzdW1tYXJ5KGVmYV8zX3Njb3Jlc19yX2QyX2FsbCkKYGBgCgpgYGB7ciwgcmVzdWx0cyA9ICJhc2lzIn0KIyBmdWxsIG1vZGVsCiMgZml4ZWYoZWZhXzNfc2NvcmVzX3JfZDJfYWxsKSAlPiUgCiMgICBkYXRhLmZyYW1lKCkgJT4lCiMgICByb3duYW1lc190b19jb2x1bW4oIlBhcmFtZXRlciIpICU+JQojICAgbXV0YXRlKFBhcmFtZXRlciA9IHJlY29kZV9mYWN0b3IoUGFyYW1ldGVyLAojICAgICAiSW50ZXJjZXB0IiA9ICIoSW50ZXJjZXB0KSIsCiMgICAgICJjaGFyYWN0ZXJhbmltX2luYW4iID0gImNoYXJhY3RlcnM6IGFuaW1hdGVzIHZzLiBpbmFuaW1hdGVzIiwKIyAgICAgImNoYXJhY3Rlcm1hbW1fbm9ubSIgPSAiY2hhcmFjdGVyczogbWFtbWFscyB2cy4gb3RoZXIgYW5pbWFscyIsCiMgICAgICJjaGFyYWN0ZXJlbGVwX2dvbW8iID0gImNoYXJhY3RlcnM6IGVsZXBoYW50IHZzLiBvdGhlciBtYW1tYWxzIiwKIyAgICAgImNoYXJhY3RlcmdvYXRfbW91cyIgPSAiY2hhcmFjdGVyczogZ29hdCB2cy4gbW91c2UiLAojICAgICAiY2hhcmFjdGVyYmlyZF9iZWV0IiA9ICJjaGFyYWN0ZXJzOiBiaXJkIHZzLiBiZWV0bGUiLAojICAgICAiY2hhcmFjdGVydGVjaF90b3lzIiA9ICJjaGFyYWN0ZXJzOiB0ZWNobm9sb2dpZXMgdnMuIHRveXMiLAojICAgICAiY2hhcmFjdGVycm9ib19jb21wIiA9ICJjaGFyYWN0ZXJzOiByb2JvdCB2cy4gY29tcHV0ZXIiLAojICAgICAiY2hhcmFjdGVydGVkZF9kb2xsIiA9ICJjaGFyYWN0ZXJzOiB0ZWRkeSBiZWFyIHZzLiBkb2xsIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTSIgPSAiSEVBUlQgKHZzLiBncmFuZCBtZWFuKSIsCiMgICAgICJmYWN0b3JfbmFtZU1fR00iID0gIk1JTkQgKHZzLiBncmFuZCBtZWFuKSIsCiMgICAgICJhZ2VfZ3JvdXBDSDQ2X0FEIiA9ICJhZ2UgZ3JvdXAgKDQtNnkgdnMuIGFkdWx0cykiLAojICAgICAiYWdlX2dyb3VwQ0g3OV9BRCIgPSAiYWdlIGdyb3VwICg3LTl5IHZzLiBhZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTpjaGFyYWN0ZXJhbmltX2luYW4iID0gImNoYXJhY3RlcnMgKGFuaW1hdGVzL2luYW5pbWF0ZXMpIMOXIEhFQVJUIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTpjaGFyYWN0ZXJtYW1tX25vbm0iID0gImNoYXJhY3RlcnMgKG1hbW1hbHMvb3RoZXIgYW5pbWFscykgw5cgSEVBUlQiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmNoYXJhY3RlcmVsZXBfZ29tbyIgPSAiY2hhcmFjdGVycyAoZWxlcGhhbnQvb3RoZXIgbWFtbWFscykgw5cgSEVBUlQiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmNoYXJhY3RlcmdvYXRfbW91cyIgPSAiY2hhcmFjdGVycyAoZ29hdC9tb3VzZSkgw5cgSEVBUlQiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmNoYXJhY3RlcmJpcmRfYmVldCIgPSAiY2hhcmFjdGVycyAoYmlyZC9iZWV0bGUpIMOXIEhFQVJUIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTpjaGFyYWN0ZXJ0ZWNoX3RveXMiID0gImNoYXJhY3RlcnMgKHRlY2hub2xvZ2llcy90b3lzKSDDlyBIRUFSVCIsCiMgICAgICJmYWN0b3JfbmFtZUhfR006Y2hhcmFjdGVycm9ib19jb21wIiA9ICJjaGFyYWN0ZXJzIChyb2JvdC9jb21wdXRlcikgw5cgSEVBUlQiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmNoYXJhY3RlcnRlZGRfZG9sbCIgPSAiY2hhcmFjdGVycyAodGVkZHkgYmVhci9kb2xsKSDDlyBIRUFSVCIsCiMgICAgICJmYWN0b3JfbmFtZU1fR006Y2hhcmFjdGVyYW5pbV9pbmFuIiA9ICJjaGFyYWN0ZXJzIChhbmltYXRlcy9pbmFuaW1hdGVzKSDDlyBNSU5EIiwKIyAgICAgImZhY3Rvcl9uYW1lTV9HTTpjaGFyYWN0ZXJtYW1tX25vbm0iID0gImNoYXJhY3RlcnMgKG1hbW1hbHMvb3RoZXIgYW5pbWFscykgw5cgTUlORCIsCiMgICAgICJmYWN0b3JfbmFtZU1fR006Y2hhcmFjdGVyZWxlcF9nb21vIiA9ICJjaGFyYWN0ZXJzIChlbGVwaGFudC9vdGhlciBtYW1tYWxzKSDDlyBNSU5EIiwKIyAgICAgImZhY3Rvcl9uYW1lTV9HTTpjaGFyYWN0ZXJnb2F0X21vdXMiID0gImNoYXJhY3RlcnMgKGdvYXQvbW91c2UpIMOXIE1JTkQiLAojICAgICAiZmFjdG9yX25hbWVNX0dNOmNoYXJhY3RlcmJpcmRfYmVldCIgPSAiY2hhcmFjdGVycyAoYmlyZC9iZWV0bGUpIMOXIE1JTkQiLAojICAgICAiZmFjdG9yX25hbWVNX0dNOmNoYXJhY3RlcnRlY2hfdG95cyIgPSAiY2hhcmFjdGVycyAodGVjaG5vbG9naWVzL3RveXMpIMOXIE1JTkQiLAojICAgICAiZmFjdG9yX25hbWVNX0dNOmNoYXJhY3RlcnJvYm9fY29tcCIgPSAiY2hhcmFjdGVycyAocm9ib3QvY29tcHV0ZXIpIMOXIE1JTkQiLAojICAgICAiZmFjdG9yX25hbWVNX0dNOmNoYXJhY3RlcnRlZGRfZG9sbCIgPSAiY2hhcmFjdGVycyAodGVkZHkgYmVhci9kb2xsKSDDlyBNSU5EIiwKIyAgICAgImFnZV9ncm91cENINDZfQUQ6Y2hhcmFjdGVyYW5pbV9pbmFuIiA9ICJjaGFyYWN0ZXJzIChhbmltYXRlcy9pbmFuaW1hdGVzKSDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJhZ2VfZ3JvdXBDSDQ2X0FEOmNoYXJhY3Rlcm1hbW1fbm9ubSIgPSAiY2hhcmFjdGVycyAobWFtbWFscy9vdGhlciBhbmltYWxzKSDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJhZ2VfZ3JvdXBDSDQ2X0FEOmNoYXJhY3RlcmVsZXBfZ29tbyIgPSAiY2hhcmFjdGVycyAoZWxlcGhhbnQvb3RoZXIgbWFtbWFscykgw5cgYWdlIGdyb3VwICg0LTZ5L2FkdWx0cykiLAojICAgICAiYWdlX2dyb3VwQ0g0Nl9BRDpjaGFyYWN0ZXJnb2F0X21vdXMiID0gImNoYXJhY3RlcnMgKGdvYXQvbW91c2UpIMOXIGFnZSBncm91cCAoNC02eS9hZHVsdHMpIiwKIyAgICAgImFnZV9ncm91cENINDZfQUQ6Y2hhcmFjdGVyYmlyZF9iZWV0IiA9ICJjaGFyYWN0ZXJzIChiaXJkL2JlZXRsZSkgw5cgYWdlIGdyb3VwICg0LTZ5L2FkdWx0cykiLAojICAgICAiYWdlX2dyb3VwQ0g0Nl9BRDpjaGFyYWN0ZXJ0ZWNoX3RveXMiID0gImNoYXJhY3RlcnMgKHRlY2hub2xvZ2llcy90b3lzKSDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJhZ2VfZ3JvdXBDSDQ2X0FEOmNoYXJhY3RlcnJvYm9fY29tcCIgPSAiY2hhcmFjdGVycyAocm9ib3QvY29tcHV0ZXIpIMOXIGFnZSBncm91cCAoNC02eS9hZHVsdHMpIiwKIyAgICAgImFnZV9ncm91cENINDZfQUQ6Y2hhcmFjdGVydGVkZF9kb2xsIiA9ICJjaGFyYWN0ZXJzICh0ZWRkeSBiZWFyL2RvbGwpIMOXIGFnZSBncm91cCAoNC02eS9hZHVsdHMpIiwKIyAgICAgImFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVyYW5pbV9pbmFuIiA9ICJjaGFyYWN0ZXJzIChhbmltYXRlcy9pbmFuaW1hdGVzKSDDlyBhZ2UgZ3JvdXAgKDctOXkvYWR1bHRzKSIsCiMgICAgICJhZ2VfZ3JvdXBDSDc5X0FEOmNoYXJhY3Rlcm1hbW1fbm9ubSIgPSAiY2hhcmFjdGVycyAobWFtbWFscy9vdGhlciBhbmltYWxzKSDDlyBhZ2UgZ3JvdXAgKDctOXkvYWR1bHRzKSIsCiMgICAgICJhZ2VfZ3JvdXBDSDc5X0FEOmNoYXJhY3RlcmVsZXBfZ29tbyIgPSAiY2hhcmFjdGVycyAoZWxlcGhhbnQvb3RoZXIgbWFtbWFscykgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAojICAgICAiYWdlX2dyb3VwQ0g3OV9BRDpjaGFyYWN0ZXJnb2F0X21vdXMiID0gImNoYXJhY3RlcnMgKGdvYXQvbW91c2UpIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKIyAgICAgImFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVyYmlyZF9iZWV0IiA9ICJjaGFyYWN0ZXJzIChiaXJkL2JlZXRsZSkgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAojICAgICAiYWdlX2dyb3VwQ0g3OV9BRDpjaGFyYWN0ZXJ0ZWNoX3RveXMiID0gImNoYXJhY3RlcnMgKHRlY2hub2xvZ2llcy90b3lzKSDDlyBhZ2UgZ3JvdXAgKDctOXkvYWR1bHRzKSIsCiMgICAgICJhZ2VfZ3JvdXBDSDc5X0FEOmNoYXJhY3RlcnJvYm9fY29tcCIgPSAiY2hhcmFjdGVycyAocm9ib3QvY29tcHV0ZXIpIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKIyAgICAgImFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVydGVkZF9kb2xsIiA9ICJjaGFyYWN0ZXJzICh0ZWRkeSBiZWFyL2RvbGwpIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTphZ2VfZ3JvdXBDSDQ2X0FEIiA9ICJIRUFSVCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g0Nl9BRCIgPSAiTUlORCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZUhfR006YWdlX2dyb3VwQ0g3OV9BRCIgPSAiSEVBUlQgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVNX0dNOmFnZV9ncm91cENINzlfQUQiID0gIk1JTkQgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINDZfQUQ6Y2hhcmFjdGVyYW5pbV9pbmFuIiA9ICJjaGFyYWN0ZXJzIChhbmltYXRlcy9pbmFuaW1hdGVzKSDDlyBIRUFSVCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZUhfR006YWdlX2dyb3VwQ0g0Nl9BRDpjaGFyYWN0ZXJtYW1tX25vbm0iID0gImNoYXJhY3RlcnMgKG1hbW1hbHMvb3RoZXIgYW5pbWFscykgw5cgSEVBUlQgw5cgYWdlIGdyb3VwICg0LTZ5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINDZfQUQ6Y2hhcmFjdGVyZWxlcF9nb21vIiA9ICJjaGFyYWN0ZXJzIChlbGVwaGFudC9vdGhlciBtYW1tYWxzKSDDlyBIRUFSVCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZUhfR006YWdlX2dyb3VwQ0g0Nl9BRDpjaGFyYWN0ZXJnb2F0X21vdXMiID0gImNoYXJhY3RlcnMgKGdvYXQvbW91c2UpIMOXIEhFQVJUIMOXIGFnZSBncm91cCAoNC02eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTphZ2VfZ3JvdXBDSDQ2X0FEOmNoYXJhY3RlcmJpcmRfYmVldCIgPSAiY2hhcmFjdGVycyAoYmlyZC9iZWV0bGUpIMOXIEhFQVJUIMOXIGFnZSBncm91cCAoNC02eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTphZ2VfZ3JvdXBDSDQ2X0FEOmNoYXJhY3RlcnRlY2hfdG95cyIgPSAiY2hhcmFjdGVycyAodGVjaG5vbG9naWVzL3RveXMpIMOXIEhFQVJUIMOXIGFnZSBncm91cCAoNC02eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTphZ2VfZ3JvdXBDSDQ2X0FEOmNoYXJhY3RlcnJvYm9fY29tcCIgPSAiY2hhcmFjdGVycyAocm9ib3QvY29tcHV0ZXIpIMOXIEhFQVJUIMOXIGFnZSBncm91cCAoNC02eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTphZ2VfZ3JvdXBDSDQ2X0FEOmNoYXJhY3RlcnRlZGRfZG9sbCIgPSAiY2hhcmFjdGVycyAodGVkZHkgYmVhci9kb2xsKSDDlyBIRUFSVCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g0Nl9BRDpjaGFyYWN0ZXJhbmltX2luYW4iID0gImNoYXJhY3RlcnMgKGFuaW1hdGVzL2luYW5pbWF0ZXMpIMOXIE1JTkQgw5cgYWdlIGdyb3VwICg0LTZ5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVNX0dNOmFnZV9ncm91cENINDZfQUQ6Y2hhcmFjdGVybWFtbV9ub25tIiA9ICJjaGFyYWN0ZXJzIChtYW1tYWxzL290aGVyIGFuaW1hbHMpIMOXIE1JTkQgw5cgYWdlIGdyb3VwICg0LTZ5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVNX0dNOmFnZV9ncm91cENINDZfQUQ6Y2hhcmFjdGVyZWxlcF9nb21vIiA9ICJjaGFyYWN0ZXJzIChlbGVwaGFudC9vdGhlciBtYW1tYWxzKSDDlyBNSU5EIMOXIGFnZSBncm91cCAoNC02eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lTV9HTTphZ2VfZ3JvdXBDSDQ2X0FEOmNoYXJhY3RlcmdvYXRfbW91cyIgPSAiY2hhcmFjdGVycyAoZ29hdC9tb3VzZSkgw5cgTUlORCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g0Nl9BRDpjaGFyYWN0ZXJiaXJkX2JlZXQiID0gImNoYXJhY3RlcnMgKGJpcmQvYmVldGxlKSDDlyBNSU5EIMOXIGFnZSBncm91cCAoNC02eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lTV9HTTphZ2VfZ3JvdXBDSDQ2X0FEOmNoYXJhY3RlcnRlY2hfdG95cyIgPSAiY2hhcmFjdGVycyAodGVjaG5vbG9naWVzL3RveXMpIMOXIE1JTkQgw5cgYWdlIGdyb3VwICg0LTZ5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVNX0dNOmFnZV9ncm91cENINDZfQUQ6Y2hhcmFjdGVycm9ib19jb21wIiA9ICJjaGFyYWN0ZXJzIChyb2JvdC9jb21wdXRlcikgw5cgTUlORCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g0Nl9BRDpjaGFyYWN0ZXJ0ZWRkX2RvbGwiID0gImNoYXJhY3RlcnMgKHRlZGR5IGJlYXIvZG9sbCkgw5cgTUlORCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZUhfR006YWdlX2dyb3VwQ0g3OV9BRDpjaGFyYWN0ZXJhbmltX2luYW4iID0gImNoYXJhY3RlcnMgKGFuaW1hdGVzL2luYW5pbWF0ZXMpIMOXIEhFQVJUIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTphZ2VfZ3JvdXBDSDc5X0FEOmNoYXJhY3Rlcm1hbW1fbm9ubSIgPSAiY2hhcmFjdGVycyAobWFtbWFscy9vdGhlciBhbmltYWxzKSDDlyBIRUFSVCDDlyBhZ2UgZ3JvdXAgKDctOXkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZUhfR006YWdlX2dyb3VwQ0g3OV9BRDpjaGFyYWN0ZXJlbGVwX2dvbW8iID0gImNoYXJhY3RlcnMgKGVsZXBoYW50L290aGVyIG1hbW1hbHMpIMOXIEhFQVJUIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTphZ2VfZ3JvdXBDSDc5X0FEOmNoYXJhY3RlcmdvYXRfbW91cyIgPSAiY2hhcmFjdGVycyAoZ29hdC9tb3VzZSkgw5cgSEVBUlQgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVyYmlyZF9iZWV0IiA9ICJjaGFyYWN0ZXJzIChiaXJkL2JlZXRsZSkgw5cgSEVBUlQgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVydGVjaF90b3lzIiA9ICJjaGFyYWN0ZXJzICh0ZWNobm9sb2dpZXMvdG95cykgw5cgSEVBUlQgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVycm9ib19jb21wIiA9ICJjaGFyYWN0ZXJzIChyb2JvdC9jb21wdXRlcikgw5cgSEVBUlQgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVydGVkZF9kb2xsIiA9ICJjaGFyYWN0ZXJzICh0ZWRkeSBiZWFyL2RvbGwpIMOXIEhFQVJUIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lTV9HTTphZ2VfZ3JvdXBDSDc5X0FEOmNoYXJhY3RlcmFuaW1faW5hbiIgPSAiY2hhcmFjdGVycyAoYW5pbWF0ZXMvaW5hbmltYXRlcykgw5cgTUlORCDDlyBhZ2UgZ3JvdXAgKDctOXkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g3OV9BRDpjaGFyYWN0ZXJtYW1tX25vbm0iID0gImNoYXJhY3RlcnMgKG1hbW1hbHMvb3RoZXIgYW5pbWFscykgw5cgTUlORCDDlyBhZ2UgZ3JvdXAgKDctOXkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g3OV9BRDpjaGFyYWN0ZXJlbGVwX2dvbW8iID0gImNoYXJhY3RlcnMgKGVsZXBoYW50L290aGVyIG1hbW1hbHMpIMOXIE1JTkQgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVNX0dNOmFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVyZ29hdF9tb3VzIiA9ICJjaGFyYWN0ZXJzIChnb2F0L21vdXNlKSDDlyBNSU5EIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lTV9HTTphZ2VfZ3JvdXBDSDc5X0FEOmNoYXJhY3RlcmJpcmRfYmVldCIgPSAiY2hhcmFjdGVycyAoYmlyZC9iZWV0bGUpIMOXIE1JTkQgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVNX0dNOmFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVydGVjaF90b3lzIiA9ICJjaGFyYWN0ZXJzICh0ZWNobm9sb2dpZXMvdG95cykgw5cgTUlORCDDlyBhZ2UgZ3JvdXAgKDctOXkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g3OV9BRDpjaGFyYWN0ZXJyb2JvX2NvbXAiID0gImNoYXJhY3RlcnMgKHJvYm90L2NvbXB1dGVyKSDDlyBNSU5EIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lTV9HTTphZ2VfZ3JvdXBDSDc5X0FEOmNoYXJhY3RlcnRlZGRfZG9sbCIgPSAiY2hhcmFjdGVycyAodGVkZHkgYmVhci9kb2xsKSDDlyBNSU5EIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIikpICU+JQojICAgYXJyYW5nZShQYXJhbWV0ZXIpICU+JQojICAgbXV0YXRlKFggPSBpZmVsc2UoUTIuNSAqIFE5Ny41ID4gMCwgIioiLCAiIikpICU+JQojICAgbXV0YXRlX2F0KHZhcnMoLVBhcmFtZXRlciwgLVgpLCAKIyAgICAgICAgICAgICBmdW5zKGZvcm1hdChyb3VuZCguLCAyKSwgbnNtYWxsID0gMikpKSAlPiUKIyAgIHJlbmFtZShiID0gRXN0aW1hdGUsIEVycm9yID0gRXN0LkVycm9yLCAiICIgPSBYKSAlPiUKIyAgIHVuaXRlKGA5NSUgQ0lgLCBRMi41LCBROTcuNSwgc2VwID0gIiwgIikgJT4lCiMgICBtdXRhdGUoYDk1JSBDSWAgPSBwYXN0ZTAoIlsiLCBgOTUlIENJYCwgIl0iKSkgJT4lCiMgICBrbml0cjo6a2FibGUoZm9ybWF0ID0gImh0bWwiLCBhbGlnbiA9IGMoImwiLCByZXAoInIiLCAzKSksCiMgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSAzOiBGaXhlZCBlZmZlY3RzIGZyb20gYSBtaXhlZC1lZmZlY3RzIEJheWVzaWFuIHJlZ3Jlc3Npb24gbW9kZWwgcHJlZGljdGluZyBmYWN0b3Igc2NvcmVzIGluIFN0dWR5IDIgYnkgY2hhcmFjdGVyLCBmYWN0b3IgKEJPRFksIEhFQVJULCBNSU5EKSwgYW5kIGFnZSBncm91cC4gVGhlIG1vZGVsIHVzZWQgdGhlIGZvcm11bGEgJ2ZhY3RvciBzY29yZSB+IGZhY3RvciAqIGFnZSBncm91cCAqIGNoYXJhY3RlciArICgxIHwgc3ViamVjdCknIGFuZCB3YXMgaW1wbGVtZW50ZWQgaW4gdGhlICdicm1zJyBwYWNrYWdlIGZvciBSIChCw7xya25lciwgMjAxNykuIEZhY3RvciB3YXMgZWZmZWN0LWNvZGVkOyBhZ2UtZ3JvdXAgd2FzIGR1bW15LWNvZGVkIHdpdGggYWR1bHRzIGFzIHRoZSBiYXNlbGluZTsgYW5kIGNoYXJhY3RlciB3YXMgY29kZWQgd2l0aCBlaWdodCBvcnRob2dvbmFsIGNvbnRyYXN0cyAoc2VlIG1haW4gdGV4dCkuIEFzdGVyaXNrcyBtYXJrIHBhcmFtZXRlcnMgd2hvc2UgOTUlIGNyZWRpYmxlIGludGVydmFsIGRvZXMgbm90IGluY2x1ZGUgMC4iKSAlPiUKIyAgIGthYmxlX3N0eWxpbmcoKQpgYGAKCmBgYHtyLCByZXN1bHRzID0gImFzaXMiLCBpbmNsdWRlID0gVH0KIyAjIHN1YnNldCBvZiBtb2RlbAojIGZpeGVmKGVmYV8zX3Njb3Jlc19yX2QyX2FsbCkgJT4lCiMgICBkYXRhLmZyYW1lKCkgJT4lCiMgICByb3duYW1lc190b19jb2x1bW4oIlBhcmFtZXRlciIpICU+JQojICAgZmlsdGVyKFBhcmFtZXRlciAhPSAiSW50ZXJjZXB0IiwKIyAgICAgICAgICAhZ3JlcGwoImNoYXJhY3Rlcm1hbW1fbm9ubSIsIFBhcmFtZXRlciksCiMgICAgICAgICAgIWdyZXBsKCJjaGFyYWN0ZXJlbGVwX2dvbW8iLCBQYXJhbWV0ZXIpLAojICAgICAgICAgICFncmVwbCgiY2hhcmFjdGVyZ29hdF9tb3VzIiwgUGFyYW1ldGVyKSwKIyAgICAgICAgICAhZ3JlcGwoImNoYXJhY3RlcmJpcmRfYmVldCIsIFBhcmFtZXRlciksCiMgICAgICAgICAgIWdyZXBsKCJjaGFyYWN0ZXJ0ZWNoX3RveXMiLCBQYXJhbWV0ZXIpLAojICAgICAgICAgICFncmVwbCgiY2hhcmFjdGVycm9ib19jb21wIiwgUGFyYW1ldGVyKSwKIyAgICAgICAgICAhZ3JlcGwoImNoYXJhY3RlcnRlZGRfZG9sbCIsIFBhcmFtZXRlcikpICU+JQojICAgbXV0YXRlKFBhcmFtZXRlciA9IHJlY29kZV9mYWN0b3IoCiMgICAgIFBhcmFtZXRlciwKIyAgICAgIyBBRFVMVFMKIyAgICAgImZhY3Rvcl9uYW1lSF9HTSIgPSAiSEVBUlQgKHZzLiBncmFuZCBtZWFuKSIsCiMgICAgICJmYWN0b3JfbmFtZU1fR00iID0gIk1JTkQgKHZzLiBncmFuZCBtZWFuKSIsCiMgICAgICJjaGFyYWN0ZXJhbmltX2luYW4iID0gImNoYXJhY3RlcnM6IGFuaW1hdGVzIHZzLiBpbmFuaW1hdGVzIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTpjaGFyYWN0ZXJhbmltX2luYW4iID0gImNoYXJhY3RlcnMgKGFuaW1hdGVzL2luYW5pbWF0ZXMpIMOXIEhFQVJUIiwKIyAgICAgImZhY3Rvcl9uYW1lTV9HTTpjaGFyYWN0ZXJhbmltX2luYW4iID0gImNoYXJhY3RlcnMgKGFuaW1hdGVzL2luYW5pbWF0ZXMpIMOXIE1JTkQiLAojICAgICAjIE9MREVSIENISUxEUkVOCiMgICAgICJhZ2VfZ3JvdXBDSDc5X0FEIiA9ICJhZ2UgZ3JvdXAgKDctOXkgdnMuIGFkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINzlfQUQiID0gIkhFQVJUIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lTV9HTTphZ2VfZ3JvdXBDSDc5X0FEIiA9ICJNSU5EIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKIyAgICAgImFnZV9ncm91cENINzlfQUQ6Y2hhcmFjdGVyYW5pbV9pbmFuIiA9ICJjaGFyYWN0ZXJzIChhbmltYXRlcy9pbmFuaW1hdGVzKSDDlyBhZ2UgZ3JvdXAgKDctOXkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZUhfR006YWdlX2dyb3VwQ0g3OV9BRDpjaGFyYWN0ZXJhbmltX2luYW4iID0gImNoYXJhY3RlcnMgKGFuaW1hdGVzL2luYW5pbWF0ZXMpIMOXIEhFQVJUIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lTV9HTTphZ2VfZ3JvdXBDSDc5X0FEOmNoYXJhY3RlcmFuaW1faW5hbiIgPSAiY2hhcmFjdGVycyAoYW5pbWF0ZXMvaW5hbmltYXRlcykgw5cgTUlORCDDlyBhZ2UgZ3JvdXAgKDctOXkvYWR1bHRzKSIsCiMgICAgICMgWU9VTkdFUiBDSElMRFJFTgojICAgICAiYWdlX2dyb3VwQ0g0Nl9BRCIgPSAiYWdlIGdyb3VwICg0LTZ5IHZzLiBhZHVsdHMpIiwKIyAgICAgImZhY3Rvcl9uYW1lSF9HTTphZ2VfZ3JvdXBDSDQ2X0FEIiA9ICJIRUFSVCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g0Nl9BRCIgPSAiTUlORCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJhZ2VfZ3JvdXBDSDQ2X0FEOmNoYXJhY3RlcmFuaW1faW5hbiIgPSAiY2hhcmFjdGVycyAoYW5pbWF0ZXMvaW5hbmltYXRlcykgw5cgYWdlIGdyb3VwICg0LTZ5L2FkdWx0cykiLAojICAgICAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINDZfQUQ6Y2hhcmFjdGVyYW5pbV9pbmFuIiA9ICJjaGFyYWN0ZXJzIChhbmltYXRlcy9pbmFuaW1hdGVzKSDDlyBIRUFSVCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiMgICAgICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g0Nl9BRDpjaGFyYWN0ZXJhbmltX2luYW4iID0gImNoYXJhY3RlcnMgKGFuaW1hdGVzL2luYW5pbWF0ZXMpIMOXIE1JTkQgw5cgYWdlIGdyb3VwICg0LTZ5L2FkdWx0cykiKSkgJT4lCiMgICBhcnJhbmdlKFBhcmFtZXRlcikgJT4lCiMgICBtdXRhdGUoWCA9IGlmZWxzZShRMi41ICogUTk3LjUgPiAwLCAiKiIsICIiKSkgJT4lCiMgICBtdXRhdGVfYXQodmFycygtUGFyYW1ldGVyLCAtWCksCiMgICAgICAgICAgICAgZnVucyhmb3JtYXQocm91bmQoLiwgMiksIG5zbWFsbCA9IDIpKSkgJT4lCiMgICByZW5hbWUoYiA9IEVzdGltYXRlLCBFcnJvciA9IEVzdC5FcnJvciwgIiAiID0gWCkgJT4lCiMgICB1bml0ZShgOTUlIENJYCwgUTIuNSwgUTk3LjUsIHNlcCA9ICIsICIpICU+JQojICAgbXV0YXRlKGA5NSUgQ0lgID0gcGFzdGUwKCJbIiwgYDk1JSBDSWAsICJdIikpICU+JQojICAga25pdHI6OmthYmxlKGZvcm1hdCA9ICJodG1sIiwgYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgMykpLAojICAgICAgICAgICAgICAgIGNhcHRpb24gPSAiVGFibGUgMzogQSBzdWJzZXQgb2YgdGhlIGZpeGVkIGVmZmVjdHMgZnJvbSBhIG1peGVkLWVmZmVjdHMgQmF5ZXNpYW4gcmVncmVzc2lvbiBtb2RlbCBwcmVkaWN0aW5nIGZhY3RvciBzY29yZXMgaW4gU3R1ZHkgMiBieSBjaGFyYWN0ZXIsIGZhY3RvciAoQk9EWSwgSEVBUlQsIE1JTkQpLCBhbmQgYWdlIGdyb3VwLiBUaGUgbW9kZWwgdXNlZCB0aGUgZm9ybXVsYSAnZmFjdG9yIHNjb3JlIH4gZmFjdG9yICogYWdlIGdyb3VwICogY2hhcmFjdGVyICsgKDEgfCBzdWJqZWN0KScgYW5kIHdhcyBpbXBsZW1lbnRlZCBpbiB0aGUgJ2JybXMnIHBhY2thZ2UgZm9yIFIgKELDvHJrbmVyLCAyMDE3KS4gRmFjdG9yIHdhcyBlZmZlY3QtY29kZWQ7IGFnZS1ncm91cCB3YXMgZHVtbXktY29kZWQgd2l0aCBhZHVsdHMgYXMgdGhlIGJhc2VsaW5lOyBhbmQgY2hhcmFjdGVyIHdhcyBjb2RlZCB3aXRoIGVpZ2h0IG9ydGhvZ29uYWwgY29udHJhc3RzIChzZWUgbWFpbiB0ZXh0KS4gSGVyZSB3ZSBoYXZlIGluY2x1ZGVkIG9ubHkgYSBzdWJzZXQgb2YgcGFyYW1ldGVyIG9mIHN0cm9uZyB0aGVvcmV0aWNhbCBpbnRlcmVzdDsgc2VlIFNPTSBmb3IgdGhlIGZ1bGwgbW9kZWwuIEFzdGVyaXNrcyBtYXJrIHBhcmFtZXRlcnMgd2hvc2UgOTUlIGNyZWRpYmxlIGludGVydmFsIGRvZXMgbm90IGluY2x1ZGUgMC4iKSAlPiUKIyAgIGthYmxlX3N0eWxpbmcoKSAlPiUKIyAgIGdyb3VwX3Jvd3MoIkFkdWx0cyIsIDEsIDUpICU+JQojICAgZ3JvdXBfcm93cygiT2xkZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyIsIDYsIDExKSAlPiUKIyAgIGdyb3VwX3Jvd3MoIllvdW5nZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyIsIDEyLCAxNykKYGBgCgpgYGB7cn0KZDJfYW5pbSA8LSBlZmFfM19zY29yZXNfZDJfYWxsICU+JQogIG11dGF0ZShhbmltX2luYW4gPSBjYXNlX3doZW4oCiAgICBjaGFyYWN0ZXIgJWluJSBjKCJiZWV0bGUiLCAiYmlyZCIsICJtb3VzZSIsICJnb2F0IiwgImVsZXBoYW50IikgfiAiYW5pbWF0ZSIsCiAgICBjaGFyYWN0ZXIgJWluJSBjKCJjb21wdXRlciIsICJyb2JvdCIsICJkb2xsIiwgInRlZGR5IGJlYXIiKSB+ICJpbmFuaW1hdGUiKSkgJT4lCiAgbXV0YXRlKGFuaW1faW5hbiA9IGZhY3RvcihhbmltX2luYW4sIGxldmVscyA9IGMoImluYW5pbWF0ZSIsICJhbmltYXRlIikpKQoKY29udHJhc3RzKGQyX2FuaW0kYWdlX2dyb3VwKSA8LSBjYmluZCgiQ0g0Nl9BRCIgPSBjKDEsIDAsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDSDc5X0FEIiA9IGMoMCwgMSwgMCkpCmNvbnRyYXN0cyhkMl9hbmltJGZhY3Rvcl9uYW1lKSA8LSBjYmluZCgiSF9HTSIgPSBjKC0xLCAxLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNX0dNIiA9IGMoLTEsIDAsIDEpKQpjb250cmFzdHMoZDJfYW5pbSRhbmltX2luYW4pIDwtIGNiaW5kKCJhbmltX0dNIiA9IGMoLTEsIDEpKQoKIyBkMl9hbmltX3IgPC0gYnJtKHNjb3JlIH4gZmFjdG9yX25hbWUgKiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAgKyAKIyAgICAgICAgICAgICAgICgxIHwgc3ViaWQpICsKIyAgICAgICAgICAgICAgICgxICsgZmFjdG9yX25hbWUgKyBhZ2VfZ3JvdXAgfCBjaGFyYWN0ZXIpLAojICAgICAgICAgICAgIGRhdGEgPSBkMl9hbmltLAojICAgICAgICAgICAgIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSksCiMgICAgICAgICAgICAgY29yZXMgPSA0KQojIHNhdmVSRFMoZDJfYW5pbV9yLCBmaWxlID0gIi4vYnJtc19tb2RlbHMvZDJfYW5pbV9yLnJkcyIpCgpkMl9hbmltX3IgPC0gcmVhZFJEUygiLi9icm1zX21vZGVscy9kMl9hbmltX3IucmRzIikKIyBzdW1tYXJZKGQyX2FuaW1fcikKYGBgCgpgYGB7ciwgcmVzdWx0cyA9ICJhc2lzIiwgaW5jbHVkZSA9IFR9CmZpeGVmKGQyX2FuaW1fcikgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiUGFyYW1ldGVyIikgJT4lCiAgbXV0YXRlKFBhcmFtZXRlciA9IHJlY29kZV9mYWN0b3IoCiAgICBQYXJhbWV0ZXIsCiAgICAjIEFEVUxUUwogICAgIkludGVyY2VwdCIgPSAiKEludGVyY2VwdCkiLAogICAgImZhY3Rvcl9uYW1lSF9HTSIgPSAiSEVBUlQgKHZzLiBncmFuZCBtZWFuKSIsCiAgICAiZmFjdG9yX25hbWVNX0dNIiA9ICJNSU5EICh2cy4gZ3JhbmQgbWVhbikiLAogICAgImFuaW1faW5hbmFuaW1fR00iID0gImNoYXJhY3RlcnM6IGFuaW1hdGVzIHZzLiBpbmFuaW1hdGVzIiwKICAgICJmYWN0b3JfbmFtZUhfR006YW5pbV9pbmFuYW5pbV9HTSIgPSAiY2hhcmFjdGVycyAoYW5pbWF0ZXMvaW5hbmltYXRlcykgw5cgSEVBUlQiLAogICAgImZhY3Rvcl9uYW1lTV9HTTphbmltX2luYW5hbmltX0dNIiA9ICJjaGFyYWN0ZXJzIChhbmltYXRlcy9pbmFuaW1hdGVzKSDDlyBNSU5EIiwKICAgICMgT0xERVIgQ0hJTERSRU4KICAgICJhZ2VfZ3JvdXBDSDc5X0FEIiA9ICJhZ2UgZ3JvdXAgKDctOXkgdnMuIGFkdWx0cykiLAogICAgImZhY3Rvcl9uYW1lSF9HTTphZ2VfZ3JvdXBDSDc5X0FEIiA9ICJIRUFSVCDDlyBhZ2UgZ3JvdXAgKDctOXkvYWR1bHRzKSIsCiAgICAiZmFjdG9yX25hbWVNX0dNOmFnZV9ncm91cENINzlfQUQiID0gIk1JTkQgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAogICAgImFuaW1faW5hbmFuaW1fR006YWdlX2dyb3VwQ0g3OV9BRCIgPSAiY2hhcmFjdGVycyAoYW5pbWF0ZXMvaW5hbmltYXRlcykgw5cgYWdlIGdyb3VwICg3LTl5L2FkdWx0cykiLAogICAgImZhY3Rvcl9uYW1lSF9HTTphbmltX2luYW5hbmltX0dNOmFnZV9ncm91cENINzlfQUQiID0gImNoYXJhY3RlcnMgKGFuaW1hdGVzL2luYW5pbWF0ZXMpIMOXIEhFQVJUIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKICAgICJmYWN0b3JfbmFtZU1fR006YW5pbV9pbmFuYW5pbV9HTTphZ2VfZ3JvdXBDSDc5X0FEIiA9ICJjaGFyYWN0ZXJzIChhbmltYXRlcy9pbmFuaW1hdGVzKSDDlyBNSU5EIMOXIGFnZSBncm91cCAoNy05eS9hZHVsdHMpIiwKICAgICMgWU9VTkdFUiBDSElMRFJFTgogICAgImFnZV9ncm91cENINDZfQUQiID0gImFnZSBncm91cCAoNC02eSB2cy4gYWR1bHRzKSIsCiAgICAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINDZfQUQiID0gIkhFQVJUIMOXIGFnZSBncm91cCAoNC02eS9hZHVsdHMpIiwKICAgICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g0Nl9BRCIgPSAiTUlORCDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiAgICAiYW5pbV9pbmFuYW5pbV9HTTphZ2VfZ3JvdXBDSDQ2X0FEIiA9ICJjaGFyYWN0ZXJzIChhbmltYXRlcy9pbmFuaW1hdGVzKSDDlyBhZ2UgZ3JvdXAgKDQtNnkvYWR1bHRzKSIsCiAgICAiZmFjdG9yX25hbWVIX0dNOmFuaW1faW5hbmFuaW1fR006YWdlX2dyb3VwQ0g0Nl9BRCIgPSAiY2hhcmFjdGVycyAoYW5pbWF0ZXMvaW5hbmltYXRlcykgw5cgSEVBUlQgw5cgYWdlIGdyb3VwICg0LTZ5L2FkdWx0cykiLAogICAgImZhY3Rvcl9uYW1lTV9HTTphbmltX2luYW5hbmltX0dNOmFnZV9ncm91cENINDZfQUQiID0gImNoYXJhY3RlcnMgKGFuaW1hdGVzL2luYW5pbWF0ZXMpIMOXIE1JTkQgw5cgYWdlIGdyb3VwICg0LTZ5L2FkdWx0cykiKSkgJT4lCiAgYXJyYW5nZShQYXJhbWV0ZXIpICU+JQogIG11dGF0ZShYID0gaWZlbHNlKFEyLjUgKiBROTcuNSA+IDAsICIqIiwgIiIpKSAlPiUKICBtdXRhdGVfYXQodmFycygtUGFyYW1ldGVyLCAtWCksCiAgICAgICAgICAgIGZ1bnMoZm9ybWF0KHJvdW5kKC4sIDIpLCBuc21hbGwgPSAyKSkpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIEVycm9yID0gRXN0LkVycm9yLCAiICIgPSBYKSAlPiUKICB1bml0ZShgOTUlIENJYCwgUTIuNSwgUTk3LjUsIHNlcCA9ICIsICIpICU+JQogIG11dGF0ZShgOTUlIENJYCA9IHBhc3RlMCgiWyIsIGA5NSUgQ0lgLCAiXSIpKSAlPiUKICBrbml0cjo6a2FibGUoZm9ybWF0ID0gImh0bWwiLCBhbGlnbiA9IGMoImwiLCByZXAoInIiLCAzKSksCiAgICAgICAgICAgICAgIGNhcHRpb24gPSAiVGFibGUgMzogRml4ZWQgZWZmZWN0cyBmcm9tIGEgbWl4ZWQtZWZmZWN0cyBCYXllc2lhbiByZWdyZXNzaW9uIG1vZGVsIHByZWRpY3RpbmcgZmFjdG9yIHNjb3JlcyBpbiBTdHVkeSAyIGJ5IGFuaW1hY3kgc3RhdHVzIChhbmltYXRlcywgaW5hbmltYXRlcyksIGZhY3RvciAoQk9EWSwgSEVBUlQsIE1JTkQpLCBhbmQgYWdlIGdyb3VwICg0LTZ5LCA3LTl5LCBhZHVsdHMpLiBUaGUgbW9kZWwgdXNlZCB0aGUgZm9ybXVsYSAnZmFjdG9yIHNjb3JlIH4gZmFjdG9yICogYWdlIGdyb3VwICogYW5pbWFjeSArICgxIHwgc3ViamVjdCkgKyAoMSArIGZhY3RvciArIGFnZSBncm91cCB8IGNoYXJhY3RlciknIGFuZCB3YXMgaW1wbGVtZW50ZWQgaW4gdGhlICdicm1zJyBwYWNrYWdlIGZvciBSIChCw7xya25lciwgMjAxNykuIEFuaW1hY3kgc3RhdHVzIGFuZCBmYWN0b3Igd2VyZSBlZmZlY3QtY29kZWQ7IGFnZS1ncm91cCB3YXMgZHVtbXktY29kZWQgd2l0aCBhZHVsdHMgYXMgdGhlIGJhc2VsaW5lLiBBc3Rlcmlza3MgbWFyayBwYXJhbWV0ZXJzIHdob3NlIDk1JSBjcmVkaWJsZSBpbnRlcnZhbCBkb2VzIG5vdCBpbmNsdWRlIDAuIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIkFkdWx0cyIsIDEsIDYpICU+JQogIGdyb3VwX3Jvd3MoIjctOXkgdnMuIGFkdWx0cyIsIDcsIDEyKSAlPiUKICBncm91cF9yb3dzKCI0LTZ5IHZzLiBhZHVsdHMiLCAxMywgMTgpCmBgYAoKQnkgZGVmaW5pdGlvbiwgYWR1bHRzJyBmYWN0b3Igc2NvcmVzIGRpZCBub3QgZGlmZmVyIGFjcm9zcyBmYWN0b3JzIChIRUFSVCB2cy4gZ3JhbmQgbWVhbjogYHIgd3JpdGVfYl85NUNJX2Z1bihkMl9hbmltX3IsICJmYWN0b3JfbmFtZUhfR00iKWA7IE1JTkQgdnMuIGdyYW5kIG1lYW46IGByIHdyaXRlX2JfOTVDSV9mdW4oZDJfYW5pbV9yLCAiZmFjdG9yX25hbWVNX0dNIilgKS4gQXMgd2Ugd291bGQgZXhwZWN0LCBhZHVsdHMgYXR0cmlidXRlZCBtb3JlIG1lbnRhbCBjYXBhY2l0aWVzIChjb2xsYXBzaW5nIGFjcm9zcyBmYWN0b3JzKSB0byBhbmltYXRlcyB0aGFuIGluYW5pbWF0ZXMgKGByIHdyaXRlX2JfOTVDSV9mdW4oZDJfYW5pbV9yLCAiYW5pbV9pbmFuYW5pbV9HTSIpYCnigJRhIGRpZmZlcmVuY2UgdGhhdCB3YXMgZGltaW5pc2hlZCBpbiB0aGUgX0hFQVJUXyBkb21haW4gKGByIHdyaXRlX2JfOTVDSV9mdW4oZDJfYW5pbV9yLCAiZmFjdG9yX25hbWVIX0dNOmFuaW1faW5hbmFuaW1fR00iKWApLCBidXQgbm90IHN1YnN0YW50aWFsbHkgZGltaW5pc2hlZCBpbiB0aGUgX01JTkRfIGRvbWFpbiAoYHIgd3JpdGVfYl85NUNJX2Z1bihkMl9hbmltX3IsICJmYWN0b3JfbmFtZU1fR006YW5pbV9pbmFuYW5pbV9HTSIpYCkuCgpBcyBhIGdyb3VwLCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuJ3MgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBkaWQgbm90IGRpZmZlciBmcm9tIGFkdWx0cywgY29sbGFwc2luZyBjb2xsYXBzaW5nIGFjcm9zcyBmYWN0b3JzIGFuZCBjaGFyYWN0ZXJzIChgciB3cml0ZV9iXzk1Q0lfZnVuKGQyX2FuaW1fciwgImFnZV9ncm91cENINzlfQUQiKWAp4oCUYnV0IHRoaXMgbWFza3Mgc2V2ZXJhbCBpbXBvcnRhbnQgZGlmZmVyZW5jZXMgYmV0d2VlbiBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLiBBcyBpbiBTdHVkeSAxLCBvbGRlciBjaGlsZHJlbidzIHNjb3JlcyB3ZXJlIGNoYXJhY3Rlcml6ZWQgYnkgYSByZWxhdGl2ZSBvdmVyLWF0dHJpYnV0aW9uIG9mIGFiaWxpdGllcyBpbiB0aGUgX0hFQVJUXyBkb21haW4gKGByIHdyaXRlX2JfOTVDSV9mdW4oZDJfYW5pbV9yLCAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINzlfQUQiKWApLCBhbmQgYSByZWxhdGl2ZSB1bmRlci1hdHRyaWJ1dGlvbiBvZiBhYmlsaXRpZXMgaW4gdGhlIF9NSU5EXyBkb21haW4gKGByIHdyaXRlX2JfOTVDSV9mdW4oZDJfYW5pbV9yLCAiZmFjdG9yX25hbWVNX0dNOmFnZV9ncm91cENINzlfQUQiKWApLiBDb2xsYXBzaW5nIGFjcm9zcyBmYWN0b3JzLCBvbGRlciBjaGlsZHJlbiBtYWRlIGxlc3Mgb2YgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGFuaW1hdGUgYW4gaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzLCByZWxhdGl2ZSB0byBhZHVsdHMgKGByIHdyaXRlX2JfOTVDSV9mdW4oZDJfYW5pbV9yLCAiYW5pbV9pbmFuYW5pbV9HTTphZ2VfZ3JvdXBDSDc5X0FEIilgKS4gVGhpcyByZWxhdGl2ZSB1bmRlci1kaWZmZXJlbnRpYXRpb24gb2YgYW5pbWF0ZSBhbmQgaW5hbmltYXRlIGNoYXJhY3RlcnMgd2FzIHBhcnRpY3VsYXJseSBwcm9ub3VuY2VkIGluIHRoZSBfTUlORF8gZG9tYWluIChgciB3cml0ZV9iXzk1Q0lfZnVuKGQyX2FuaW1fciwgImZhY3Rvcl9uYW1lTV9HTTphbmltX2luYW5hbmltX0dNOmFnZV9ncm91cENINzlfQUQiKWApLgoKSG93IGRpZCB5b3VuZ2VyIGNoaWxkcmVuIGNvbXBhcmUgdG8gYWR1bHRzPyBBcyBhIGdyb3VwLCA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuJ3MgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBkaWQgbm90IGRpZmZlciBmcm9tIGFkdWx0cywgY29sbGFwc2luZyBjb2xsYXBzaW5nIGFjcm9zcyBmYWN0b3JzIGFuZCBjaGFyYWN0ZXJzIChgciB3cml0ZV9iXzk1Q0lfZnVuKGQyX2FuaW1fciwgImFnZV9ncm91cENINDZfQUQiKWAp4oCUYnV0IGFnYWluLCB0aGlzIG1hc2tzIGEgdmFyaWV0eSBvZiBkZXZlbG9wbWVudGFsIGRpZmZlcmVuY2VzIHRoYXQgZ2VuZXJhbGx5IHBhcmFsbGVsIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIG9sZGVyIGNoaWxkcmVuIGFuZCBhZHVsdHMganVzdCBkZXNjcmliZWQuIE11Y2ggbGlrZSBvbGRlciBjaGlsZHJlbiwgeW91bmdlciBjaGlsZHJlbidzIHNjb3JlcyB3ZXJlIGNoYXJhY3Rlcml6ZWQgYnkgYSByZWxhdGl2ZSBvdmVyLWF0dHJpYnV0aW9uIG9mIGFiaWxpdGllcyBpbiB0aGUgX0hFQVJUXyBkb21haW4gKGByIHdyaXRlX2JfOTVDSV9mdW4oZDJfYW5pbV9yLCAiZmFjdG9yX25hbWVIX0dNOmFnZV9ncm91cENINDZfQUQiKWApIGFuZCBhIHJlbGF0aXZlIHVuZGVyLWF0dHJpYnV0aW9uIG9mIGFiaWxpdGllcyBpbiB0aGUgX01JTkRfIGRvbWFpbiAoYHIgd3JpdGVfYl85NUNJX2Z1bihkMl9hbmltX3IsICJmYWN0b3JfbmFtZU1fR006YWdlX2dyb3VwQ0g0Nl9BRCIpYCksIGFuZCB0aGV5IGRpZmZlcmVudGlhdGVkIGxlc3MgYmV0d2VlbiBhbmltYXRlIGFuIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyB0aGFuIGRpZCBhZHVsdHMgKGByIHdyaXRlX2JfOTVDSV9mdW4oZDJfYW5pbV9yLCAiYW5pbV9pbmFuYW5pbV9HTTphZ2VfZ3JvdXBDSDQ2X0FEIilgKS4gVGhpcyByZWxhdGl2ZSB1bmRlci1kaWZmZXJlbnRpYXRpb24gb2YgYW5pbWF0ZSBhbmQgaW5hbmltYXRlIGNoYXJhY3RlcnMgd2FzIHBhcnRpY3VsYXJseSBwcm9ub3VuY2VkIGluIHRoZSBfTUlORF8gZG9tYWluIChgciB3cml0ZV9iXzk1Q0lfZnVuKGQyX2FuaW1fciwgImZhY3Rvcl9uYW1lTV9HTTphbmltX2luYW5hbmltX0dNOmFnZV9ncm91cENINDZfQUQiKWApLCBhbmQgbGVzcyBwcm9ub3VuY2VkIGluIHRoZSBfSEVBUlRfIGRvbWFpbiAoYHIgd3JpdGVfYl85NUNJX2Z1bihkMl9hbmltX3IsICJmYWN0b3JfbmFtZUhfR006YW5pbV9pbmFuYW5pbV9HTTphZ2VfZ3JvdXBDSDQ2X0FEIilgKS4KCmBgYHtyfQpmaWcwNmFfcGxvdCA8LSBkMl9hbmltICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgZmFjdG9yX25hbWUsIGFuaW1faW5hbikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhbmltX2luYW4pKSAlPiUKICBtdXRhdGUoYWdlX2dyb3VwID0gcmVjb2RlX2ZhY3RvcihhZ2VfZ3JvdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuNDYiID0gIjQtNnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbjc5IiA9ICI3LTl5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWR1bHRzIiA9ICJhZHVsdHMiKSwKICAgICAgICAgYW5pbV9pbmFuID0gcmVjb2RlX2ZhY3RvcihhbmltX2luYW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluYW5pbWF0ZSIgPSAiaW5hbmltYXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuaW1hdGUiID0gImFuaW1hdGVzIiksCiAgICAgICAgIGZhY2V0X2xhYiA9ICJhbmltYXRlcyB2cy4gaW5hbmltYXRlcyIpICU+JQogIGdncGxvdChhZXMoeCA9IGFnZV9ncm91cCwgZ3JvdXAgPSBhbmltX2luYW4sCiAgICAgICAgICAgICB5ID0gbWVhbiwgY29sb3IgPSBhbmltX2luYW4pKSArIAogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoZmFjdG9yX25hbWUpLCBjb2xzID0gdmFycyhmYWNldF9sYWIpLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAyKSArCiAgZ2VvbV9saW5lKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoInNsYXRlZ3JleSIsICJmaXJlYnJpY2sxIiksIG5hLnZhbHVlID0gImdyYXkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAsIDEwLCAxKSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChucm93ID0gMiwgcmV2ZXJzZSA9IFQpKSArCiAgbGFicyh4ID0gImFnZSBncm91cCIsIHkgPSAiZmFjdG9yIHNjb3JlIiwgY29sb3IgPSAiYW5pbWFjeSIpCmBgYAoKYGBge3J9CmZpZzA2Yl9wbG90IDwtIGdncGxvdChlZmFfM19zY29yZXNfYm9vdF9kMl9hbGwgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRfam9pbihkMl9hbGxfY2hhciAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKGNoYXJhY3RlciA9IGdzdWIoIl8iLCAiICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcikpKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKGFnZV9ncm91cCA9IHJlY29kZV9mYWN0b3IoYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGRyZW40NiIgPSAiNC02eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbjc5IiA9ICI3LTl5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkdWx0cyIgPSAiYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb2xsIiwgInRlZGR5IGJlYXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZSIsICJiaXJkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3VzZSIsICJnb2F0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGVwaGFudCIpKSksCiAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IGFnZV9ncm91cCwgeSA9IG1lYW4sIGNvbG9yID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoZmFjdG9yX25hbWUpLCBjb2xzID0gdmFycyhjaGFyYWN0ZXIpLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAyKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGNoYXJhY3RlcikpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSkgKwogICAgICAgICAgICAgICAgICAjIGZhdHRlbiA9IDMsIHNoYXBlID0gMjEsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fbGFiZWwoYWVzKGxhYmVsID0gcGFzdGUwKCIobj0iLCBuLCAiKSIpLCB5ID0gY2lfbG93ZXIpLCAKICAgICAgICAgICAgIGxhYmVsLnNpemUgPSAwLCBhbHBoYSA9IDAuOCwgCiAgICAgICAgICAgICBudWRnZV95ID0gLTAuNSwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwLCAxMCwgMSkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJQYWlyZWQiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdyA9IDIsIGJ5cm93ID0gVCwgcmV2ZXJzZSA9IFQpKSArCiAgbGFicyh4ID0gImFnZSBncm91cCIsIHkgPSAiIiwgY29sb3IgPSAiY2hhcmFjdGVyIikKYGBgCgpgYGB7cn0KZmlnMDZfcGxvdHMgPC0gcGxvdF9ncmlkKGZpZzA2YV9wbG90LCBmaWcwNmJfcGxvdCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3cgPSAxLCByZWxfd2lkdGhzID0gYygwLjE1LCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkEiLCAiQiIpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gOSwgZmlnLmFzcCA9IDAuNX0KZmlnMDZfd2l0aF9jYXB0aW9uIDwtIGFkZF9zdWIoZmlnMDZfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNjogRmFjdG9yIHNjb3JlcyBmb3IgeW91bmdlciBjaGlsZHJlbiAoNC02eSksIG9sZGVyIGNoaWxkcmVuICg3LTl5KSwgYW5kIGFkdWx0cyBpbiBTdHVkeSAyLCBpbiB3aGljaCBlYWNoIHBhcnRpY2lwYW50IGFzc2Vzc2VkIDIwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciBvbmUgb2YgbmluZSB0YXJnZXQgY2hhcmFjdGVycy4gRWFjaCBwYXJ0aWNpcGFudCByZWNpZXZlZCBhIGZhY3RvciBzY29yZSBmb3IgZWFjaCBmYWN0b3IgKEJPRFksIEhFQVJULCBhbmQgTUlORCwgYXMgZGVmaW5lZCBieSBhbiBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMgb2YgYWR1bHRzJyByZXNwb25zZXMpLiBXZSB0cmVhdGVkIHRoZXNlIHNjb3JlcyBhcyBzdW1tYXJpZXMgb2YgdGhhdCBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgaW4gdGhlc2UgZG9tYWluczsgYSBzY29yZSBvZiAwIGNvcnJlc3BvbmRzIHRvIHRoZSBtZWFuIGZvciB0aGF0IGZhY3RvciBhbW9uZyBhZHVsdHMuIFdlIHByZXNlbnQgdHdvIHdheXMgb2YgbG9va2luZyBhdCB0aGVzZSBkYXRhOiBjb2xsYXBzaW5nIGNoYXJhY3RlcnMgaW50byBhbmltYXRlcyAoYmVldGxlLCBiaXJkLCBtb3VzZSwgZ29hdCwgZWxlcGhhbnQpIHZzLiBpbmFuaW1hdGVzIChjb21wdXRlciwgcm9ib3QsIGRvbGwsIHRlZGR5IGJlYXI7IFBhbmVsIEEpOyBhbmQgZXhhbWluaW5nIGVhY2ggY2hhcmFjdGVyIGluZGl2aWR1YWxseSAoUGFuZWwgQikuIEVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE5vdGUgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIHktYXhpcyBkaWZmZXJzIGFjcm9zcyByb3dzLiIsIDIxMCksIHggPSAwLCBoanVzdCA9IDApCmdnZHJhdyhmaWcwNl93aXRoX2NhcHRpb24pCmBgYAoKQSB2aXN1YWwgaW5zcGVjdGlvbiBvZiBGaWd1cmUgNiBmdXJ0aGVyIGNsYXJpZmllcyB0aGVzZSBmaW5kaW5ncy4gCgpJbiB0aGUgX0JPRFlfIGRvbWFpbiwgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGFuaW1hdGUgYW5kIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyB3YXMgY2xlYXJseSBwcmVzZW50IGluIGFsbCBhZ2UgZ3JvdXBzLCB0aG91Z2ggc2xpZ2h0bHkgYXR0ZW51YXRlZCBhbW9uZyA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuIChzZWUgRmlndXJlIDYsIFBhbmVsIEEsIHRvcCByb3cpLiBBIGNsb3NlciBsb29rIGF0IGZhY3RvciBzY29yZXMgZm9yIGluZGl2aWR1YWwgY2hhcmFjdGVycyAoUGFuZWwgQiwgdG9wIHJvdykgc3VnZ2VzdHMgdGhhdCB5b3VuZ2VyIGNoaWxkcmVuIGRpdmVyZ2VkIGZyb20gYWR1bHRzIHByaW1hcmlseSBpbiB0aGVpciBhdHRyaWJ1dGlvbnMgdG8gdGhlICJlZGdlIGNhc2VzIiB0aGF0IHdlcmUgdGhlIGZvY3VzIG9mIFN0dWR5IDE6IHRoZSByb2JvdCAodG8gd2hpY2ggdGhleSBvdmVyLWF0dHJpYnV0ZWQgdGhlIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyByZWxhdGVkIHRvIHRoZSBfQk9EWV8pLCBhbmQgdGhlIGJlZXRsZSAodG8gd2hpY2ggdGhleSB1bmRlci1hdHRyaWJ1dGVkIHN1Y2ggX0JPRFlfIGNhcGFjaXRpZXMpLiBPbGRlciBjaGlsZHJlbidzIF9CT0RZXyBhdHRyaWJ1dGlvbnMgd2VyZSBnZW5lcmFsbHkgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhZHVsdHMnIGZvciBhbG1vc3QgYWxsIHRhcmdldCBjaGFyYWN0ZXJzLiAoVGhlIG9ubHkgcG9zc2libGUgZXhjZXB0aW9uIGlzIHRoZSBiaXJk4oCUYnV0LCBpbiBvdXIgdmlldywgaXQgYXBwZWFycyB0aGF0IHRoaXMgd2FzIGRyaXZlbiBieSBfYWR1bHRzXyBzbGlnaHRseSBfdW5kZXJfLWF0dHJpYnV0aW5nIF9CT0RZXyBjYXBhY2l0aWVzIHRvIHRoaXMgY2hhcmFjdGVyLikKCkluIHRoZSBfSEVBUlRfIGRvbWFpbiwgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gYW5pbWF0ZSBhbmQgaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzIHdhcyBzdWJ0bGVyIGFjcm9zcyBhbGwgYWdlIGdyb3VwcywgYW5kIHRoZSBkZWdyZWUgb2YgZGlzdGluY3Rpb24gZGlkIG5vdCB2YXJ5IGRyYW1hdGljYWxseSB3aXRoIGFnZSAoc2VlIEZpZ3VyZSA2LCBQYW5lbCBBLCBtaWRkbGUgcm93KS4gSW5zdGVhZCwgY2hpbGRyZW4gZ2VuZXJhbGx5IG92ZXItYXR0cmlidXRlZCBfSEVBUlRfIHRvIF9ib3RoXyBhbmltYXRlcyBhbmQgaW5hbmltYXRlczsgdGhlc2Ugb3Zlci1hdHRyaWJ1dGlvbnMgZGVjbGluZWQgYmV0d2VlbiA0LTZ5IGFuZCA3LTl5IG9mIGFnZSwgYnV0IGRpZCBub3QgcmVhY2ggYWR1bHQtbGlrZSBsZXZlbHMgZXZlbiBhbW9uZyBvbGRlciBjaGlsZHJlbi4gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggU3R1ZHkgMSwgaW4gd2hpY2ggNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBvdmVyLWF0dHJpYnV0ZWQgX0hFQVJUXyB0byBib3RoIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCwgcmVsYXRpdmUgdG8gYWR1bHRzLiBJbiB0aGlzIHN0dWR5LCBvbGRlciBjaGlsZHJlbiBhZ2FpbiBhdHRyaWJ1dGVkIG1vcmUgX0hFQVJUXyBjYXBhY2l0aWVzIHRvIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCwgYnV0IGFsc28gdG8gdGhlIG1vdXNlIGFuZCB0aGUgZ29hdCAoc2VlIFBhbmVsIEIsIG1pZGRsZSByb3cpLiBSZWxhdGl2ZSB0byBvdGhlciBhbmltYXRlcywgYWR1bHRzIGF0dHJpYnV0ZWQgcGFydGljdWxhcmx5IGZldyBfSEVBUlRfIGNhcGFjaXRpZXMgdG8gdGhlIG1vdXNlIGFuZCB0aGUgZ29hdOKAlHBlcmhhcHMgYmVjYXVzZSBvZiB0aGVpciByZXNwZWNpdmUgc3RhdHVzZXMgYXMgdmVybWluIGFuZCBmb29kIGFuaW1hbHMgaW4gdGhpcyBjdWx0dXJhbCBjb250ZXh0LgoKRmluYWxseSwgaW4gdGhlIF9NSU5EXyBkb21haW4sIG5laXRoZXIgZ3JvdXAgb2YgY2hpbGRyZW4gbWFkZSBhIHJvYnVzdCBkaXN0aW5jdGlvbiBiZXR3ZWVuIGFuaW1hdGVzIGFuZCBpbmFtYXRlc+KAlGJ1dCBhZHVsdHMgY2xlYXJseSBkaWQgKHNlZSBGaWd1cmUgNiwgUGFuZWwgQSwgYm90dG9tIHJvdykuIEluc3RlYWQsIGNoaWxkcmVuIGdlbmVyYWxseSB1bmRlci1hdHRyaWJ1dGVkIF9NSU5EXyB0byBfYm90aF8gYW5pbWF0ZXMgYW5kIGluYW5pbWF0ZXMuIFRoZXNlIHVuZGVyLWF0dHJpYnV0aW9ucyBiZWNhbWUgbGVzcyBkcmFtYXRpYyBiZXR3ZWVuIDQtNnkgYW5kIDctOXkgb2YgYWdlLCBhbmQgYnkgNy05eSBjaGlsZHJlbidzIF9NSU5EXyBhdHRyaWJ1dGlvbnMgdG8gaW5hbmltYXRlcyB3ZXJlIGFkdWx0LWxpa2UuIEJ1dCBldmVuIGF0IDctOXksIGNoaWxkcmVuIGRpZCBub3QgYXR0cmlidXRlZCBhcyBtYW55IF9NSU5EXyBjYXBhY2l0aWVzIHRvIGFuaW1hdGVzIGFzIGRpZCBhZHVsdHM7IGJldHdlZW4gNy05eSBhbmQgYWR1bHRob29kLCBfTUlORF8gYXR0cmlidXRpb25zIGluY3JlYXNlZCBmb3IgYWxsIG9mIHRoZSBhbmltYXRlIGNoYXJhY3RlcnMsIGFuZCBwYXJ0aWN1bGFybHkgZHJhbWF0aWNhbGx5IGZvciB0aGUgYmlyZCwgdGhlIG1vdXNlLCBhbmQgdGhlIGVsZXBoYW50IChzZWUgRmlndXJlIDYsIFBhbmVsIEIsIGJvdHRvbSByb3cpLgoKVGhlIHJhdyBkYXRhIGZ1cnRoZXIgc3VwcG9yc3QgdGhlc2Ugb2JzZXJ2YXRpb25zOyBzZWUgRmlndXJlIDcgZm9yIHJhdyBjb3VudHMgb2YgX25vXywgX2tpbmRhXywgYW5kIF95ZXNfIHJlc3BvbnNlcyBmb3IgYWxsIGl0ZW1zLCBncm91cGVkIGJ5IGZhY3RvciwgYW5pbWFjeSBzdGF0dXMgKFBhbmVscyBBLUMpIG9yIGNoYXJhY3RlciAoUGFuZWxzIEQtRiksIGFuZCBhZ2UgZ3JvdXAuIEZvciBleGFtcGxlLCBjb25zaWRlciBwYWluICh0aGUgZmlyc3QgY2FwYWNpdHkgdW5kZXIgX0JPRFlfKTogQWNyb3NzIGFnZSBncm91cHMsIG1vc3QgcGFydGljaXBhbnRzIHNhaWQgdGhhdCBhbiBlbGVwaGFudCBjb3VsZCBmZWVsIHBhaW4sIHdpdGggdGhlIHByb3BvcnRpb24gb2YgInllcyIgcmVzcG9uc2VzIGluY3JlYXNpbmcgYWNyb3NzIGFnZSBncm91cHM7IG1lYW53aGlsZSwgZmV3IHBhcnRpY2lwYW50cyBzYWlkIHRoYXQgYSBjb21wdXRlciBjb3VsZCBmZWVsIHBhaW4sIHdpdGggdGhlIHByb3BvcnRpb24gb2YgInllcyIgcmVzcG9uc2VzIGRlY3JlYXNpbmcgYWNyb3NzIGFnZSBncm91cHMuIE1vcmUgZHJhbWF0aWMgY2hhbmdlcyBhcmUgZXZpZGVudCBpbiB0aGUgX0hFQVJUXyBhbmQgX01JTkRfIGZhY3RvcnMsIHdpdGggYXR0cmlidXRpb25zIG9mIF9IRUFSVF8gZ2VuZXJhbGx5IGRlY3JlYXNpbmcgYWNyb3NzIGFnZSBncm91cHMgKGVzcGVjaWFsbHkgdG8gaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzIC0gZS5nLiwgdGhlIGNvbXB1dGVyLCB0aGUgcm9ib3QpLCBhbmQgYXR0cmlidXRpb25zIG9mIF9NSU5EXyBnZW5lcmFsbHkgaW5jcmVhc2luZyBhY3Jvc3MgYWdlIGdyb3VwcyAoZXNwZWNpYWxseSB0byBhbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzIC0gZS5nLiwgdGhlIG1vdXNlLCB0aGUgZ29hdCwgdGhlIGVsZXBoYW50KS4gKFNlZSBTT00gZm9yIGFuIGFuYWx5c2lzLCBwYXJhbGxlbCB0byB0aGUgcmVncmVzc2lvbiBhbmFseXNlcyBoZXJlLCBvZiB0aGUgcHJvcG9ydGlvbiBvZiB0aGUgdG9wLWxvYWRpbmcgbWVudGFsIGNhcGFjaXRpZXMgZm9yIGVhY2ggZmFjdG9yIHRoYXQgd2VyZSBlbmRvcnNlZCBieSBwYXJ0aWNpcGFudHMgb2YgZGlmZmVyZW50IGFnZXMuKQoKYGBge3J9CmQyX2FsbCA8LSBkMl9hZCAlPiUKICBmdWxsX2pvaW4oZDJfNzkpICU+JQogIGZ1bGxfam9pbihkMl80NikgJT4lCiAgc2VsZWN0KGFnZV9ncm91cCwgc3ViaWQsIGNoYXJhY3RlciwgY2FwYWNpdHksIHJlc3BvbnNlX251bSkgJT4lCiAgbGVmdF9qb2luKGxvYWRpbmdzX2Z1bihlZmFfM19kMl9hZCkgJT4lIAogICAgICAgICAgICAgIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICAgICAgICAgICAgICB0b3BfbigxLCBsb2FkaW5nKSAlPiUKICAgICAgICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgICAgICAgYXJyYW5nZShmYWN0b3IsIGRlc2MobG9hZGluZykpICU+JQogICAgICAgICAgICAgIG11dGF0ZShvcmRlciA9IDE6MjApICU+JQogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgZmFjdG9yLCBvcmRlcikpICU+JQogIGZpbHRlcighaXMubmEocmVzcG9uc2VfbnVtKSkgJT4lCiAgbGVmdF9qb2luKGQyX2FsbF9jaGFyICU+JSBzZWxlY3QoLXByb3ApKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSByZWNvZGVfZmFjdG9yKHJlc3BvbnNlX251bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJubyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMC41IiA9ICJraW5kYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAieWVzIiksCiAgICAgICAgIGZhY3RvciA9IHJlY29kZV9mYWN0b3IoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMSIgPSAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkYyIiA9ICJIRUFSVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkYzIiA9ICJNSU5EIiksCiAgICAgICAgIGFnZV9ncm91cCA9IHJlY29kZV9mYWN0b3IoYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbjQ2IiA9ICI0LTZ5IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuNzkiID0gIjctOXkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWR1bHRzIiA9ICJhZHVsdHMiKSwKICAgICAgICAgY2hhcmFjdGVyID0gaWZlbHNlKGdyZXBsKCJiZWFyIiwgYXMuY2hhcmFjdGVyKGNoYXJhY3RlcikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlZGR5IGJlYXIiLCBhcy5jaGFyYWN0ZXIoY2hhcmFjdGVyKSksCiAgICAgICAgIGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9sbCIsICJ0ZWRkeSBiZWFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZSIsICJiaXJkIiwgIm1vdXNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvYXQiLCAiZWxlcGhhbnQiKSksCiAgICAgICAgIGFnZV9ncm91cF9uID0gcGFzdGUwKGFnZV9ncm91cCwgIlxuKG4gPSAiLCBuLCAiKSIpKQpgYGAKCmBgYHtyfQpmaWcwN2FfZnVuIDwtIGZ1bmN0aW9uKHdoaWNoZmFjKXsKICAKICBmaWcgPC0gZDJfYWxsICU+JQogICAgZmlsdGVyKGZhY3RvciA9PSB3aGljaGZhYykgJT4lCiAgICBsZWZ0X2pvaW4oZDJfYW5pbSAlPiUgZGlzdGluY3QoY2hhcmFjdGVyLCBhbmltX2luYW4pKSAlPiUKICAgIG11dGF0ZShhbmltX2luYW4gPSByZWNvZGVfZmFjdG9yKGFuaW1faW5hbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmFuaW1hdGUiID0gImluYW5pbWF0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuaW1hdGUiID0gImFuaW1hdGVzIikpICU+JQogICAgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihjYXBhY2l0eSwgb3JkZXIpLAogICAgICAgICAgICAgICBmaWxsID0gYW5pbV9pbmFuLCBhbHBoYSA9IHJlc3BvbnNlKSkgKwogICAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhhbmltX2luYW4pLCByb3dzID0gdmFycyhhZ2VfZ3JvdXApLAogICAgICAgICAgICAgICBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKwogICAgIyBnZW9tX2xhYmVsKGRhdGEgPSBkMl9hbmltICU+JQogICAgIyAgICAgICAgICAgICAgbGVmdF9qb2luKAogICAgIyAgICAgICAgICAgICAgICBkMl9hbGxfY2hhciAlPiUKICAgICMgICAgICAgICAgICAgIGRpc3RpbmN0KGNoYXJhY3RlciwgZmFjdG9yLCBhZ2VfZ3JvdXAsIG4pLAogICAgIyAgICAgICAgICAgIGFlcyh4ID0gTkEsIHkgPSBOQSwgYWxwaGEgPSBOQSwgZmlsbCA9IE5BLAogICAgIyAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgiKG49IiwgbiwgIikiKSksCiAgICAjICAgICAgICAgICAgeCA9IDAuNzUsIHkgPSAxLCBhbHBoYSA9IDAuOCwgaGp1c3QgPSAwLCB2anVzdCA9IDEsCiAgICAjICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gIndoaXRlIiwgc2l6ZSA9IDMpICsKICAgIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUGFpcmVkIikgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwgMC41LCAxKSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoInNsYXRlZ3JleSIsICJmaXJlYnJpY2sxIiksIG5hLnZhbHVlID0gImdyYXkiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJzbGF0ZWdyZXkiLCAiZmlyZWJyaWNrMSIpLCBuYS52YWx1ZSA9ICJncmF5IikgKwogICAgdGhlbWVfYncoKSArCiAgICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogICAgbGFicyh0aXRsZSA9IHdoaWNoZmFjLAogICAgICAgICB5ID0gInByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIiwKICAgICAgICAgeCA9ICJtZW50YWwgY2FwYWNpdHkgKGJ5IGZhY3RvcikiLAogICAgICAgICBmaWxsID0gImFuaW1hY3kiKSArCiAgICBndWlkZXMoZmlsbCA9IGd1aWRlX2xlZ2VuZChucm93ID0gMSwgYnlyb3cgPSBULCByZXZlcnNlID0gVCksCiAgICAgICAgICAgYWxwaGEgPSAibm9uZSIpCiAgCiAgaWYod2hpY2hmYWMgIT0gIk1JTkQiKXsKICAgIGZpZyA8LSBmaWcgKyBndWlkZXMoZmlsbCA9ICJub25lIiwgYWxwaGEgPSAibm9uZSIpICsgbGFicyh4ID0gIiIpCiAgfQogIAogIHJldHVybihmaWcpCn0KCmZpZzA3YV9CT0RZX3Bsb3QgPC0gZmlnMDdhX2Z1bigiQk9EWSIpCmZpZzA3YV9IRUFSVF9wbG90IDwtIGZpZzA3YV9mdW4oIkhFQVJUIikKZmlnMDdhX01JTkRfcGxvdCA8LSBmaWcwN2FfZnVuKCJNSU5EIikKCmZpZzA3YV9wbG90cyA8LSBwbG90X2dyaWQoZmlnMDdhX0JPRFlfcGxvdCwgZmlnMDdhX0hFQVJUX3Bsb3QsIGZpZzA3YV9NSU5EX3Bsb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIGxhYmVscyA9ICJBVVRPIiwKICAgICAgICAgICAgICAgICAgICAgICAgICByZWxfaGVpZ2h0cyA9IGMoMSwgMSwgMS4yKSkKYGBgCgpgYGB7cn0KZmlnMDdiX2Z1biA8LSBmdW5jdGlvbih3aGljaGZhYyl7CiAgCiAgZmlnIDwtIGQyX2FsbCAlPiUKICAgIGxlZnRfam9pbihkMl9hbGxfY2hhciAlPiUKICAgICAgICAgICAgICAgIG11dGF0ZShjaGFyYWN0ZXIgPSBnc3ViKCJfIiwgIiAiLCBhcy5jaGFyYWN0ZXIoY2hhcmFjdGVyKSkpICU+JQogICAgICAgICAgICAgICAgZGlzdGluY3QoY2hhcmFjdGVyLCBhZ2VfZ3JvdXAsIG4pKSAlPiUKICAgIGZpbHRlcihmYWN0b3IgPT0gd2hpY2hmYWMpICU+JQogICAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwgImRvbGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZWRkeSBiZWFyIiwgImJlZXRsZSIsICJiaXJkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW91c2UiLCAiZ29hdCIsICJlbGVwaGFudCIpKSkgJT4lCiAgICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKGNhcGFjaXR5LCBvcmRlciksCiAgICAgICAgICAgICAgIGZpbGwgPSBjaGFyYWN0ZXIsIGFscGhhID0gcmVzcG9uc2UpKSArCiAgICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKGNoYXJhY3RlciksIHJvd3MgPSB2YXJzKGFnZV9ncm91cCksCiAgICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICAgIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArCiAgICAjIGdlb21fbGFiZWwoZGF0YSA9IGQyX2FsbCAlPiUKICAgICMgICAgICAgICAgICAgIGxlZnRfam9pbigKICAgICMgICAgICAgICAgICAgICAgZDJfYWxsX2NoYXIgJT4lCiAgICAjICAgICAgICAgICAgICAgICAgbXV0YXRlKGNoYXJhY3RlciA9IGdzdWIoIl8iLCAiICIsIGNoYXJhY3RlciksCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb2xsIiwgInRlZGR5IGJlYXIiLAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgImJpcmQiLAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW91c2UiLCAiZ29hdCIsCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGVwaGFudCIpKSkpICU+JQogICAgIyAgICAgICAgICAgICAgZGlzdGluY3QoY2hhcmFjdGVyLCBmYWN0b3IsIGFnZV9ncm91cCwgbiksCiAgICAjICAgICAgICAgICAgYWVzKHggPSBOQSwgeSA9IE5BLCBhbHBoYSA9IE5BLCBmaWxsID0gTkEsCiAgICAjICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCIobj0iLCBuLCAiKSIpKSwKICAgICMgICAgICAgICAgICB4ID0gMC43NSwgeSA9IDEsIGFscGhhID0gMC44LCBoanVzdCA9IDAsIHZqdXN0ID0gMSwKICAgICMgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSAid2hpdGUiLCBzaXplID0gMykgKwogICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJQYWlyZWQiKSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gYygwLCAwLjUsIDEpKSArCiAgICB0aGVtZV9idygpICsKICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgICBsYWJzKHRpdGxlID0gd2hpY2hmYWMsCiAgICAgICAgIHkgPSAiIiwgCiAgICAgICAgIHggPSAibWVudGFsIGNhcGFjaXR5IChieSBmYWN0b3IpIikgKwogICAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQobnJvdyA9IDEsIGJ5cm93ID0gVCwgcmV2ZXJzZSA9IFQpLAogICAgICAgICAgIGFscGhhID0gZ3VpZGVfbGVnZW5kKG5yb3cgPSAxLCBieXJvdyA9IFQpKQogIAogIGlmKHdoaWNoZmFjICE9ICJNSU5EIil7CiAgICBmaWcgPC0gZmlnICsgZ3VpZGVzKGZpbGwgPSAibm9uZSIsIGFscGhhID0gIm5vbmUiKSArIGxhYnMoeCA9ICIiKQogIH0KICAKICByZXR1cm4oZmlnKQp9CgpmaWcwN2JfQk9EWV9wbG90IDwtIGZpZzA3Yl9mdW4oIkJPRFkiKQpmaWcwN2JfSEVBUlRfcGxvdCA8LSBmaWcwN2JfZnVuKCJIRUFSVCIpCmZpZzA3Yl9NSU5EX3Bsb3QgPC0gZmlnMDdiX2Z1bigiTUlORCIpCgpmaWcwN2JfcGxvdHMgPC0gcGxvdF9ncmlkKGZpZzA3Yl9CT0RZX3Bsb3QsIGZpZzA3Yl9IRUFSVF9wbG90LCBmaWcwN2JfTUlORF9wbG90LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCBsYWJlbHMgPSBjKCJEIiwgIkUiLCAiRiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbF9oZWlnaHRzID0gYygxLCAxLCAxLjIpKQpgYGAKCmBgYHtyfQpmaWcwN19wbG90cyA8LSBwbG90X2dyaWQoZmlnMDdhX3Bsb3RzLCBmaWcwN2JfcGxvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBucm93ID0gMSwgcmVsX3dpZHRocyA9IGMoMC4yNSwgMSkpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA4LCBmaWcuYXNwID0gMX0KZmlnMDdfd2l0aF9jYXB0aW9uIDwtIGFkZF9zdWIoZmlnMDdfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNzogUHJvcG9ydGlvbiBvZiBTdHVkeSAyIHBhcnRpY2lwYW50cyB3aG8gcmVzcG9uZGVkICd5ZXMnIChkYXJrKSwgJ2tpbmRhJyAobWVkaXVtKSwgb3IgJ25vJyAobGlnaHQpIHRvICBlYWNoIG1lbnRhbCBjYXBhY2l0eSBpdGVtLCBncm91cGVkIGJ5IHRoZSBmYWN0b3Igb24gd2hpY2ggdGhleSBsb2FkaW5nIG1vc3QgcG9zaXRpdmVseSAoQk9EWSwgSEVBUlQsIE1JTkQpIGFjY29yZGluZyB0byBhbiBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMgb2YgYWR1bHRzJyByZXNwb25zZXMuIEVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgMjAgbWVudGFsIGNhcGFjaXRpZXMgZm9yIG9uZSBvZiBuaW5lIHRhcmdldCBjaGFyYWN0ZXJzICg2LTE4IHBlciBjaGFyYWN0ZXIsIHBlciBhZ2UgZ3JvdXApLiBXZSBwcmVzZW50IHR3byB3YXlzIG9mIGxvb2tpbmcgYXQgdGhlc2UgZGF0YTogY29sbGFwc2luZyBjaGFyYWN0ZXJzIGludG8gYW5pbWF0ZXMgKGJlZXRsZSwgYmlyZCwgbW91c2UsIGdvYXQsIGVsZXBoYW50KSB2cy4gaW5hbmltYXRlcyAoY29tcHV0ZXIsIHJvYm90LCBkb2xsLCB0ZWRkeSBiZWFyOyBQYW5lbHMgQS1DKTsgYW5kIGV4YW1pbmluZyBlYWNoIGNoYXJhY3RlciBpbmRpdmlkdWFsbHkgKFBhbmVsIEQtRikuIFJlc3BvbnNlcyBhcmUgc2hvd24gc2VwYXJhdGVseSBieSBhZ2UgZ3JvdXAgKDQtNnksIDctOXksIGFkdWx0cykuIiwgMTgwKSwgeCA9IDAsIGhqdXN0ID0gMCkKZ2dkcmF3KGZpZzA3X3dpdGhfY2FwdGlvbikKYGBgCgpgYGB7cn0KZDJfYWxsX2VuZG9yc2UgPC0gZDJfYWxsICU+JQogIGxlZnRfam9pbihkMl9hbmltICU+JSBkaXN0aW5jdChjaGFyYWN0ZXIsIGFuaW1faW5hbikpICU+JQogIGdyb3VwX2J5KGZhY3Rvciwgc3ViaWQpICU+JQogIHRvcF9uKC02LCBvcmRlcikgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShlbmRvcnNlID0gaWZlbHNlKHJlc3BvbnNlX251bSA+IDAsIDEsIDApLAogICAgICAgICBhbmltX2luYW4gPSByZWNvZGVfZmFjdG9yKGFuaW1faW5hbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5hbmltYXRlIiA9ICJpbmFuaW1hdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5pbWF0ZSIgPSAiYW5pbWF0ZXMiKSkgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBzdWJpZCwgYW5pbV9pbmFuLCBjaGFyYWN0ZXIsIGZhY3RvcikgJT4lCiAgc3VtbWFyaXNlKHByb3BfZW5kb3JzZSA9IG1lYW4oZW5kb3JzZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbiA9IGxlbmd0aChlbmRvcnNlKSkgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmQyX2FsbF9lbmRvcnNlX2FuaW1fYm9vdCA8LSBkMl9hbGxfZW5kb3JzZSAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGFuaW1faW5hbiwgZmFjdG9yKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJwcm9wX2VuZG9yc2UiKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KZmlnU1VQUDJhX3Bsb3QgPC0gZDJfYWxsX2VuZG9yc2UgJT4lCiAgZmlsdGVyKGFnZV9ncm91cCAhPSAiYWR1bHRzIikgJT4lCiAgbGVmdF9qb2luKGZ1bGxfam9pbihkMl83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSksCiAgICAgICAgICAgICAgICAgICAgICBkMl80NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGFnZSkpICU+JQogIG11dGF0ZShmYWNldF9sYWIgPSAiYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMiKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhZ2UsIHkgPSBwcm9wX2VuZG9yc2UsIAogICAgICAgICAgICAgZmlsbCA9IGFuaW1faW5hbiwgY29sb3IgPSBhbmltX2luYW4pKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhmYWNldF9sYWIpLCByb3dzID0gdmFycyhmYWN0b3IpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjQsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMC4wMykgKwogIGJpbm9taWFsX3Ntb290aChhZXMod2VpZ2h0ID0gbiksIGFscGhhID0gMC4xMCwgc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAiZ2xtIiwKICAjICAgICAgICAgICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSAiYmlub21pYWwiKSkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGQyX2FsbF9lbmRvcnNlICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiKSwKICAgICAgICAgICAgIGFlcyh4ID0gMTEpLCBhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGRvZGdlLndpZHRoID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci53aWR0aCA9IDAuMjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkMl9hbGxfZW5kb3JzZV9hbmltX2Jvb3QgJT4lIAogICAgICAgICAgICAgICAgICAgIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgICAgICBhZXMoeCA9IDExLCB5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGRvZGdlLndpZHRoID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci53aWR0aCA9IDAuMjUpLCAKICAgICAgICAgICAgICAgICAgc2hvdy5sZWdlbmQgPSBGLCBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDEuNSwgc2hhcGUgPSAyMSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDQ6MTEpLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyhwYXN0ZTAoNDoxMCwgInkiKSwgImFkdWx0cyIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAxLzYpLCBsYWJlbHMgPSAwOjYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygic2xhdGVncmV5IiwgImZpcmVicmljazEiKSwgbmEudmFsdWUgPSAiZ3JheSIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJzbGF0ZWdyZXkiLCAiZmlyZWJyaWNrMSIpLCBuYS52YWx1ZSA9ICJncmF5IikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3cgPSAyLCBieXJvdyA9IFQsIHJldmVyc2UgPSBUKSwKICAgICAgICAgZmlsbCA9IGd1aWRlX2xlZ2VuZChucm93ID0gMiwgYnlyb3cgPSBULCByZXZlcnNlID0gVCkpICsKICBsYWJzKHkgPSAibnVtYmVyIG9mIGNhcGFjaXRpZXMgZW5kb3JzZWQiLCAKICAgICAgIGNvbG9yID0gImFuaW1hY3kiLCBmaWxsID0gImFuaW1hY3kiKQpgYGAKCmBgYHtyfQpkMl9hbGxfZW5kb3JzZV9ib290IDwtIGQyX2FsbF9lbmRvcnNlICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInByb3BfZW5kb3JzZSIpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQpmaWdTVVBQMmJfcGxvdCA8LSBkMl9hbGxfZW5kb3JzZSAlPiUKICBmaWx0ZXIoYWdlX2dyb3VwICE9ICJhZHVsdHMiKSAlPiUKICBsZWZ0X2pvaW4oZnVsbF9qb2luKGQyXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSwKICAgICAgICAgICAgICAgICAgICAgIGQyXzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkpICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgbXV0YXRlKGZhY2V0X2xhYiA9ICJpbmRpdmlkdWFsIGNoYXJhY2F0ZXJzIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCB5ID0gcHJvcF9lbmRvcnNlLCAKICAgICAgICAgICAgIGZpbGwgPSBjaGFyYWN0ZXIsIGNvbG9yID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoZmFjZXRfbGFiKSwgcm93cyA9IHZhcnMoZmFjdG9yKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC40LCB3aWR0aCA9IDAsIGhlaWdodCA9IDAuMDMpICsKICBiaW5vbWlhbF9zbW9vdGgoYWVzKHdlaWdodCA9IG4pLCBhbHBoYSA9IDAuMTAsIHNob3cubGVnZW5kID0gRikgKwogICMgZ2VvbV9zbW9vdGgobWV0aG9kID0gImdsbSIsCiAgIyAgICAgICAgICAgICBtZXRob2QuYXJncyA9IGxpc3QoZmFtaWx5ID0gImJpbm9taWFsIikpICsKICBnZW9tX3BvaW50KGRhdGEgPSBkMl9hbGxfZW5kb3JzZSAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICBhZXMoeCA9IDEyKSwgYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAyKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZDJfYWxsX2VuZG9yc2VfYm9vdCAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgIGFlcyh4ID0gMTIsIHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAyKSwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDEuNSwgc2hhcGUgPSAyMSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDQ6MTAsIDEyKSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMocGFzdGUwKDQ6MTAsICJ5IiksICJhZHVsdHMiKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMS82KSwgbGFiZWxzID0gMDo2KSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiUGFpcmVkIikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUGFpcmVkIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3cgPSAyLCBieXJvdyA9IFQsIHJldmVyc2UgPSBUKSwKICAgICAgICAgZmlsbCA9IGd1aWRlX2xlZ2VuZChucm93ID0gMiwgYnlyb3cgPSBULCByZXZlcnNlID0gVCkpICsKICBsYWJzKHkgPSAiIikKYGBgCgpgYGB7cn0KZmlnU1VQUDJfcGxvdHMgPC0gcGxvdF9ncmlkKGZpZ1NVUFAyYV9wbG90LCBmaWdTVVBQMmJfcGxvdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3cgPSAxLCByZWxfd2lkdGhzID0gYygwLjg1LCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9ICJBVVRPIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEYsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAxfQpmaWdTVVBQMl93aXRoX2NhcHRpb24gPC0gYWRkX3N1YihmaWdTVVBQMl9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSBTVVBQMjogTnVtYmVyIG9mIG1lbnRhbCBjYXBhY2l0eSBpdGVtcyAob3V0IG9mIDYpIGVuZG9yc2VkIGluIGVhY2ggZG9tYWluIChCT0RZLCBIRUFSVCwgYW5kIE1JTkQpIGJ5IDQtIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkeSAyLCBpbiB3aGljaCBlYWNoIHBhcnRpY2lwYW50IGFzc2Vzc2VkIDIwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciBvbmUgb2YgbmluZSB0YXJnZXQgY2hhcmFjdGVycy4gV2UgZGVmaW5lZCBlYWNoIGRvbWFpbiBieSB0aGUgNiBpdGVtcyB0aGF0IGxvYWRlZCB0aGUgbW9zdCBwb3NpdGl2ZWx5IG9uIHRoZSBjb3JyZXNwb25kaW5nIGZhY3RvciBpbiBhbiBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMgb2YgYWR1bHRzJyByZXNwb25zZXMsIGFuZCB3ZSBjb25zaWRlcmVkIHJlc3BvbnNlcyBvZiBlaXRoZXIgJ3llcycgb3IgJ2tpbmRhJyAoYnV0IG5vdCAnbm8nKSB0byBiZSBlbmRvcnNlbWVudHMuIExpbmVzIGNvcnJlc3BvbmQgdG8gbG9naXN0aWMgcmVncmVzc2lvbnMgY29uc2lkZXJpbmcgY2hpbGRyZW4ncyBzY29yZXMgYWxvbmUuIEVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMgb24gYWR1bHRzJyBzY29yZXMuIiwgMTUzKSwgeCA9IDAsIGhqdXN0ID0gMCkKZ2dkcmF3KGZpZ1NVUFAyX3dpdGhfY2FwdGlvbikKYGBgCgojIyMjIEFnZSBkaWZmZXJlbmNlcyB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZXMKCkFzIGluIFN0dWR5IDEsIHdlIHdlcmUgaW50ZXJlc3RlZCBub3Qgb25seSBpbiBkaWZmZXJlbmNlcyBhY3Jvc3MgYWdlIGdyb3VwcywgYnV0IGFsc28gYWNyb3NzIHRoZeKAlGV2ZW4gd2lkZXLigJRhZ2UgcmFuZ2Ugd2l0aGluIG91ciBjaGlsZCBzYW1wbGVzLiBJbiBTdHVkeSAyLCB0aGlzIGluY2x1ZGVkIGNoaWxkcmVuIGFzIHlvdW5nIGFzIDQgeWVhcnMgdXAgdG8gbmVhcmx5IDEwIHllYXJzIG9mIGFnZS4gVGhpcyBhbGxvd2VkIHVzIHRvIGxvb2sgYXQgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgaW4gbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBhY3Jvc3MgYSB3aWRlIHBlcmlvZCBmcm9tIGVhcmx5IHRvIG1pZGRsZSBjaGlsZGhvb2QuCgpgYGB7cn0KIyBkMl80OV9hbmltX3IgPC0gYnJtKHNjb3JlIH4gZmFjdG9yX25hbWUgKiBhbmltX2luYW4gKiBhZ2UgKwojICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHN1YmlkKSArCiMgICAgICAgICAgICAgICAgICAgICAgICgxICsgZmFjdG9yX25hbWUgfCBjaGFyYWN0ZXIpLAojICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyX2FuaW0gJT4lCiMgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihhZ2VfZ3JvdXAgIT0gImFkdWx0cyIsICFpcy5uYShhZ2UpKSAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKGFnZSA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSksCiMgICAgICAgICAgICAgICAgICAgICBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpLAojICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0KQojIHNhdmVSRFMoZDJfNDlfYW5pbV9yLCBmaWxlID0gIi4vYnJtc19tb2RlbHMvZDJfNDlfYW5pbV9yLnJkcyIpCgpkMl80OV9hbmltX3IgPC0gcmVhZFJEUygiLi9icm1zX21vZGVscy9kMl80OV9hbmltX3IucmRzIikKIyBzdW1tYXJ5KGQyXzQ5X2FuaW1fcikKYGBgCgpgYGB7cn0KZDJfY2hfYWdlIDwtIGZ1bGxfam9pbihkMl80NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSksCiAgICAgICAgICAgICAgICAgICAgICAgZDJfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKQpgYGAKClRvIGV4cGxvcmUgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgY29udGludW91c2x5IHdpdGhpbiB0aGUgY2hpbGQgc2FtcGxlcywgd2UgY29uZHVjdGVkIGFuIGFkZGl0aW9uYWwgcmVncmVzc2lvbiBhbmFseXNpcyBvbiBjaGlsZHJlbidzIGZhY3RvciBzY29yZXMgYWxvbmUsIGluY2x1ZGluZyBpbnRlcmFjdGlvbnMgd2l0aCBleGFjdCBhZ2UgaW4geWVhcnMgKGNlbnRlcmVkIGF0IHRoZSBtZWFuOiBgciBmb3JtYXQocm91bmQobWVhbihkMl9jaF9hZ2UkYWdlLCBuYS5ybSA9IFQpLCAyKSwgbnNtYWxsID0gMilgeSkgcmF0aGVyIHRoYW4gYWdlIGdyb3VwLiBJbiBsaW5lIHdpdGggdGhlIGFnZSBncm91cCBhbmFseXNpcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHRoaXMgY29uZmlybWVkIHRoYXQsIHJlbGF0aXZlIHRvIHRoZSBncmFuZCBtZWFuLCBhdHRyaWJ1dGlvbnMgb2YgX0hFQVJUXyBkZWNyZWFzZWQgd2l0aCBhZ2UgKGByIHdyaXRlX2JfOTVDSV9mdW4oZWZhXzNfc2NvcmVzX3JfZDFfNzksICJmYWN0b3JfbmFtZUhfR006YWdlIilgKSBhbmQgYXR0cmlidXRpb25zIG9mIF9NSU5EXyBpbmNyZWFzZWQgd2l0aCBhZ2UgKGByIHdyaXRlX2JfOTVDSV9mdW4oZWZhXzNfc2NvcmVzX3JfZDFfNzksICJmYWN0b3JfbmFtZU1fR006YWdlIilgKS4gKFNlZSBUYWJsZSAyIGZvciB0aGUgZnVsbCByZXN1bHRzIG9mIHRoaXMgbW9kZWwuKQoKVGhpcyBhbmFseXNpcyBzdWdnZXN0ZWQgdGhhdCwgcmVsYXRpdmUgdG8gdGhlIGdyYW5kIG1lYW4sIGF0dHJpYnV0aW9ucyBvZiBfSEVBUlRfIGRlY3JlYXNlZCBhY3Jvc3MgdGhlIGFnZSByYW5nZSAoYHIgd3JpdGVfYl85NUNJX2Z1bihkMl80OV9hbmltX3IsICJmYWN0b3JfbmFtZUhfR006YWdlIilgKSwgd2hpbGUgYXR0cmlidXRpb25zIG9mIF9NSU5EXyBpbmNyZWFzZWQgYWNyb3NzIHRoZSBhZ2UgcmFuZ2UgKGByIHdyaXRlX2JfOTVDSV9mdW4oZDJfNDlfYW5pbV9yLCAiZmFjdG9yX25hbWVNX0dNOmFnZSIpYCkuIFRoZXNlIGZpbmRpbmdzIGFyZSBhbGwgaW4gbGluZSB3aXRoIHRoZSBhZ2UgZ3JvdXAgYW5hbHlzaXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCBzdWdnZXN0aW5nIHRoYXQgdGhlIG9ic2VydmVkIGdyb3VwIGRpZmZlcmVuY2VzIGNvcnJlc3BvbmQgdG8gZ3JhZHVhbCBkZXZlbG9wbWVudGFsIGRpZmZlcmVuY2VzIGFzIGNoaWxkcmVuJ3MgcmVzcG9uc2VzIGJlY29tZSBpbmNyZWFzaW5nbHkgYWR1bHQtbGlrZSBpbiBtYW55IHdheXMuIAoKV2Ugb2JzZXJ2ZWQgdHdvIGNvdW50ZXItZXhhbXBsZXMgdG8gdGhlIGlkZWEgdGhhdCBjaGlsZHJlbiBiZWNvbWUgaW5jcmVhc2luZ2x5IGFkdWx0LWxpa2UgaW4gdGhlaXIgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBvdmVyIHRoaXMgYWdlIHJhbmdlLCBib3RoIGhhdmluZyB0byBkbyB3aXRoIHRoZSBkZWdyZWUgdG8gd2hpY2ggY2hpbGRyZW4gb2YgZGlmZmVyZW50IGFnZXMgZGlzdGluZ3Vpc2hlZCBiZXR3ZWVuIGFuaW1hdGUgYW5kIGluYW5pbWF0ZSB0YXJnZXRzLiBJZiBjaGlsZHJlbiB3ZXJlIGJlY29taW5nIGluY3JlYXNpbmdseSBhZHVsdC1saWtlIGluIHRoZWlyIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9ucywgd2Ugd291bGQgZXhwZWN0IHRoZSBvdmVyYWxsIGRpc3RpbmN0aW9uIGJldHdlZW4gYW5pbWF0ZXMgYW5kIGluYW5pbWF0ZXMgY29sbGFwc2luZyBhY3Jvc3MgZmFjdG9ycyB0byBpbmNyZWFzZSB3aXRoIGFnZSwgZHJpdmVuIHByaW1hcmlseSBieSBpbmNyZWFzZXMgaW4gdGhlIF9CT0RZXyBhbmQgZXNwZWNpYWxseSBfTUlORF8gZG9tYWlucy4gSW5zdGVhZCwgY29sbGFwc2luZyBhY3Jvc3MgZmFjdG9ycywgdGhlIGdlbmVyYWwgZGlzdGluY3Rpb24gYmV0d2VlbiBhbmltYXRlIGFuZCBpbmFuaW1hdGUgdGFyZ2V0IGNoYXJhY3RlcnMgZGlkIF9ub3RfIGRpZmZlciB3aXRoIGFnZSAoYHIgd3JpdGVfYl85NUNJX2Z1bihkMl80OV9hbmltX3IsICJhbmltX2luYW5hbmltX0dNOmFnZSIpYCk7IF9kZWNyZWFzZWRfIGluIHRoZSBfSEVBUlRfIGRvbWFpbiwgcmVsYXRpdmUgdG8gdGhlIGdyYW5kIG1lYW4gKGByIHdyaXRlX2JfOTVDSV9mdW4oZDJfNDlfYW5pbV9yLCAiZmFjdG9yX25hbWVIX0dNOmFuaW1faW5hbmFuaW1fR006YWdlIilgKTsgYW5kIGRpZCBub3QgY2hhbmdlIHN1YnN0YW50aWFsbHkgaW4gdGhlIF9NSU5EXyBkb21haW4gKGByIHdyaXRlX2JfOTVDSV9mdW4oZDJfNDlfYW5pbV9yLCAiZmFjdG9yX25hbWVNX0dNOmFuaW1faW5hbmFuaW1fR006YWdlIilgKSwgYXMgd2UgbWlnaHQgZXhwZWN0IGlmIG9sZGVyIGNoaWxkcmVuIHdlcmUgYXBwcm9hY2hpbmcgImFkdWx0LWxpa2UiIHJlc3BvbnNlcyBpbiB0aGlzIGFzcGVjdCBvZiB0aGVpciBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLiBXZSBzcGVjdWxhdGUgb24gc2V2ZXJhbCBwb3NzaWJsZSBleHBsYW5hdGlvbnMgb2YgdGhlc2UgdW5leHBlY3RlZCBmaW5kaW5ncyBpbiB0aGUgU3R1ZHkgMiBEaXNjdXNzaW9uIHNlY3Rpb24sIGJlbG93LgoKU2VlIFRhYmxlIDQgZm9yIHRoZSBmdWxsIHJlc3VsdHMgb2YgdGhpcyBtb2RlbCwgYW5kIEZpZ3VyZSA4IGZvciBhIHZpc3VhbGl6YXRpb24gb2YgY2hhbmdlcyBpbiBjaGlsZHJlbidzIGZhY3RvciBzY29yZXMgYWNyb3NzIGFnZS4KCmBgYHtyLCByZXN1bHRzID0gImFzaXMiLCBpbmNsdWRlID0gVH0KZml4ZWYoZDJfNDlfYW5pbV9yKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJQYXJhbWV0ZXIiKSAlPiUKICBtdXRhdGUoUGFyYW1ldGVyID0gcmVjb2RlX2ZhY3RvcigKICAgIFBhcmFtZXRlciwKICAgICMgT1ZFUkFMTAogICAgIkludGVyY2VwdCIgPSAiKEludGVyY2VwdCkiLAogICAgImZhY3Rvcl9uYW1lSF9HTSIgPSAiSEVBUlQgKHZzLiBncmFuZCBtZWFuKSIsCiAgICAiZmFjdG9yX25hbWVNX0dNIiA9ICJNSU5EICh2cy4gZ3JhbmQgbWVhbikiLAogICAgImFuaW1faW5hbmFuaW1fR00iID0gImNoYXJhY3RlcnM6IGFuaW1hdGVzIHZzLiBpbmFuaW1hdGVzIiwKICAgICJmYWN0b3JfbmFtZUhfR006YW5pbV9pbmFuYW5pbV9HTSIgPSAiY2hhcmFjdGVycyAoYW5pbWF0ZXMvaW5hbmltYXRlcykgw5cgSEVBUlQiLAogICAgImZhY3Rvcl9uYW1lTV9HTTphbmltX2luYW5hbmltX0dNIiA9ICJjaGFyYWN0ZXJzIChhbmltYXRlcy9pbmFuaW1hdGVzKSDDlyBNSU5EIiwKICAgICMgQlkgQUdFCiAgICAiYWdlIiA9ICJhZ2UgKGNlbnRlcmVkIGF0IHRoZSBtZWFuKSIsCiAgICAiZmFjdG9yX25hbWVIX0dNOmFnZSIgPSAiSEVBUlQgw5cgYWdlIiwKICAgICJmYWN0b3JfbmFtZU1fR006YWdlIiA9ICJNSU5EIMOXIGFnZSIsCiAgICAiYW5pbV9pbmFuYW5pbV9HTTphZ2UiID0gImNoYXJhY3RlcnMgKGFuaW1hdGVzL2luYW5pbWF0ZXMpIMOXIGFnZSIsCiAgICAiZmFjdG9yX25hbWVIX0dNOmFuaW1faW5hbmFuaW1fR006YWdlIiA9ICJjaGFyYWN0ZXJzIChhbmltYXRlcy9pbmFuaW1hdGVzKSDDlyBIRUFSVCDDlyBhZ2UiLAogICAgImZhY3Rvcl9uYW1lTV9HTTphbmltX2luYW5hbmltX0dNOmFnZSIgPSAiY2hhcmFjdGVycyAoYW5pbWF0ZXMvaW5hbmltYXRlcykgw5cgTUlORCDDlyBhZ2UiKSkgJT4lCiAgYXJyYW5nZShQYXJhbWV0ZXIpICU+JQogIG11dGF0ZShYID0gaWZlbHNlKFEyLjUgKiBROTcuNSA+IDAsICIqIiwgIiIpKSAlPiUKICBtdXRhdGVfYXQodmFycygtUGFyYW1ldGVyLCAtWCksCiAgICAgICAgICAgIGZ1bnMoZm9ybWF0KHJvdW5kKC4sIDIpLCBuc21hbGwgPSAyKSkpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIEVycm9yID0gRXN0LkVycm9yLCAiICIgPSBYKSAlPiUKICB1bml0ZShgOTUlIENJYCwgUTIuNSwgUTk3LjUsIHNlcCA9ICIsICIpICU+JQogIG11dGF0ZShgOTUlIENJYCA9IHBhc3RlMCgiWyIsIGA5NSUgQ0lgLCAiXSIpKSAlPiUKICBrbml0cjo6a2FibGUoZm9ybWF0ID0gImh0bWwiLCBhbGlnbiA9IGMoImwiLCByZXAoInIiLCAzKSksCiAgICAgICAgICAgICAgIGNhcHRpb24gPSAiVGFibGUgNDogRml4ZWQgZWZmZWN0cyBmcm9tIGEgbWl4ZWQtZWZmZWN0cyBCYXllc2lhbiByZWdyZXNzaW9uIG1vZGVsIG9mIGNoaWxkcmVuJ3MgcmVzcG9uc2VzLCBwcmVkaWN0aW5nIGZhY3RvciBzY29yZXMgaW4gU3R1ZHkgMiBieSBhbmltYWN5IHN0YXR1cyAoYW5pbWF0ZXMsIGluYW5pbWF0ZXMpLCBmYWN0b3IgKEJPRFksIEhFQVJULCBNSU5EKSwgYW5kIGV4YWN0IGFnZS4gVGhlIG1vZGVsIHVzZWQgdGhlIGZvcm11bGEgJ2ZhY3RvciBzY29yZSB+IGZhY3RvciAqIGFnZSAqIGFuaW1hY3kgKyAoMSB8IHN1YmplY3QpJyBhbmQgd2FzIGltcGxlbWVudGVkIGluIHRoZSAnYnJtcycgcGFja2FnZSBmb3IgUiAoQsO8cmtuZXIsIDIwMTcpLiBGYWN0b3IgYW5kIGFuaW1hY3kgd2VyZSBlZmZlY3QtY29kZWQsIGFuZCBhZ2Ugd2FzIG1lYW4tY2VudGVyZWQuIEFzdGVyaXNrcyBtYXJrIHBhcmFtZXRlcnMgd2hvc2UgOTUlIGNyZWRpYmxlIGludGVydmFsIGRvZXMgbm90IGluY2x1ZGUgMC4iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiQ29sbGFwc2luZyBhY3Jvc3MgYWdlIiwgMSwgNikgJT4lCiAgZ3JvdXBfcm93cygiQWdlIGVmZmVjdHMiLCA3LCAxMikKYGBgCgpgYGB7cn0KZmlnMDhhX3Bsb3QgPC0gZ2dwbG90KGQyX2FuaW0gJT4lIAogICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShmYWNldF9sYWIgPSAiYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMiKSwKICAgICAgICAgICAgICAgICAgICAgYWVzKHggPSBhZ2UsIHkgPSBzY29yZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBhbmltX2luYW4sIGNvbG9yID0gYW5pbV9pbmFuLCBncm91cCA9IGFuaW1faW5hbikpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKGZhY3Rvcl9uYW1lKSwgY29scyA9IHZhcnMoZmFjZXRfbGFiKSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMikgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjIpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuMTAsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnQoZGF0YSA9IGQyX2FuaW0gJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgYWVzKHggPSAxMSksIGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGRvZGdlLndpZHRoID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLndpZHRoID0gMC4yNSkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGQyX2FuaW0gJT4lIAogICAgICAgICAgICAgICAgICAgIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpICU+JQogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KGFnZV9ncm91cCwgZmFjdG9yX25hbWUsIGFuaW1faW5hbikgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeCA9IDExLCB5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGRvZGdlLndpZHRoID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci53aWR0aCA9IDAuMjUpLCAKICAgICAgICAgICAgICAgICAgc2hvdy5sZWdlbmQgPSBGLCBmYXR0ZW4gPSAxLjUsIHNoYXBlID0gMjEsIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDQ6MTEpLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyhwYXN0ZTAoNDoxMCwgInkiKSwgImFkdWx0cyIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAsIDEwLCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJzbGF0ZWdyZXkiLCAiZmlyZWJyaWNrMSIpLCBuYS52YWx1ZSA9ICJncmF5IikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoInNsYXRlZ3JleSIsICJmaXJlYnJpY2sxIiksIG5hLnZhbHVlID0gImdyYXkiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdyA9IDIsIHJldmVyc2UgPSBUKSwKICAgICAgICAgZmlsbCA9IGd1aWRlX2xlZ2VuZChucm93ID0gMiwgcmV2ZXJzZSA9IFQpKSArCiAgbGFicyh4ID0gImFnZSIsIHkgPSAiZmFjdG9yIHNjb3JlIiwgCiAgICAgICBjb2xvciA9ICJhbmltYWN5IiwgZmlsbCA9ICJhbmltYWN5IikKYGBgCgpgYGB7cn0KZmlnMDhiX3Bsb3QgPC0gZ2dwbG90KGVmYV8zX3Njb3Jlc19kMl9hbGwgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShmYWNldF9sYWIgPSAiaW5kaXZpZHVhbCBjaGFyYWN0ZXJzIiksCiAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IGFnZSwgeSA9IHNjb3JlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBjaGFyYWN0ZXIsIGNvbG9yID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoZmFjZXRfbGFiKSwgcm93cyA9IHZhcnMoZmFjdG9yX25hbWUpLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAyKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGFscGhhID0gMC4xMCwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludChkYXRhID0gZWZhXzNfc2NvcmVzX2QyX2FsbCAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICBhZXMoeCA9IDEyKSwgYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAyKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZWZhXzNfc2NvcmVzX2Jvb3RfZDJfYWxsICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiKSwKICAgICAgICAgICAgICAgICAgYWVzKHggPSAxMiwgeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDIpLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDEuNSwgc2hhcGUgPSAyMSwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoNDoxMCwgMTIpLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyhwYXN0ZTAoNDoxMCwgInkiKSwgImFkdWx0cyIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAsIDEwLCAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlBhaXJlZCIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlBhaXJlZCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93ID0gMiwgYnlyb3cgPSBULCByZXZlcnNlID0gVCksCiAgICAgICAgIGZpbGwgPSBndWlkZV9sZWdlbmQobnJvdyA9IDIsIGJ5cm93ID0gVCwgcmV2ZXJzZSA9IFQpKSArCiAgbGFicyh5ID0gIiIpCmBgYAoKYGBge3J9CmZpZzA4X3Bsb3RzIDwtIHBsb3RfZ3JpZChmaWcwOGFfcGxvdCwgZmlnMDhiX3Bsb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBucm93ID0gMSwgcmVsX3dpZHRocyA9IGMoMC44NSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSAiQVVUTyIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMX0KZmlnMDhfd2l0aF9jYXB0aW9uIDwtIGFkZF9zdWIoZmlnMDhfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgODogRmFjdG9yIHNjb3JlcyBmb3IgYWR1bHRzIGFuZCA0LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDEsIHJlcGxvdHRlZCB0byBpbGx1c3RyYXRlIGFnZSBlZmZlY3RzIHdpdGhpbiB0aGUgY2hpbGQgc2FtcGxlcy4gTGluZXMgY29ycmVzcG9uZCB0byBsaW5lYXIgcmVncmVzc2lvbnMgY29uc2lkZXJpbmcgY2hpbGRyZW4ncyBzY29yZXMgYWxvbmUuIEVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMgb24gYWR1bHRzJyBzY29yZXMuIE5vdGUgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIHktYXhpcyBkaWZmZXJzIGFjcm9zcyBwYW5lbHMuIiwgMTM4KSwgeCA9IDAsIGhqdXN0ID0gMCkKZ2dkcmF3KGZpZzA4X3dpdGhfY2FwdGlvbikKYGBgCgojIyBEaXNjdXNzaW9uCgoqKkJPT0tNQVJLKioKCldlIGhhZCB0aHJlZSBnb2FscyBpbiBTdHVkeSAyOiAoMSkgVG8gdGVzdCB3aGV0aGVyIHRoZSBhZHVsdC1saWtlIGNvbmNlcHR1YWwgc3RydWN0dXJlIHJldmVhbGVkIGFtb25nIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgMSB3b3VsZCBob2xkIHVuZGVyIHRoZSByYW5nZSBvZiBjb25kaXRpb25zIHRoYXQgZWxpY2l0IHRoaXMgc3RydWN0dXJlIGFtb25nIFVTIGFkdWx0cyBpbiBXZWlzbWFuIGV0IGFsLidzICgyMDE3KSBwcmV2aW91cyB3b3JrOyAoMikgVG8gZXhwbG9yZSBjb25jZXB0dWFsIHN0cnVjdHVyZSBhdCBhbiBlYXJsaWVyIHBvaW50IGluIGRldmVsb3BtZW50OyBhbmQgKDMpIFRvIGV4cGxvcmUgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgaW4gdGhlIGFwcGxpY2F0aW9uIG9mIGNvbmNlcHRzIG9mIG1lbnRhbCBsaWZlIHRvIGEgd2lkZSByYW5nZSBvZiBhbmltYXRlIGJlaW5ncyBhbmQgaW5hbmltYXRlIG9iamVjdHMuCgpSZWdhcmRpbmcgb3VyIGZpcnN0IGdvYWwsIFN0dWR5IDIgc3VnZ2VzdHMgdGhhdCB0aGUgdGhyZWUtcGFydCBjb25jZXB0dWFsIHN0cnVjdHVyZeKAlGFuY2hvcmVkIGJ5IF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EX+KAlGlzIHJlbGlhYmxlIGFuZCByb2J1c3QgYW1vbmcgNy0gdG8gOS15ZWFyLW9sZCBVUyBjaGlsZHJlbi4gQXMgaW4gV2Vpc21hbiBldCBhbC4ncyAoMjAxNykgb3JpZ2luYWwgd29yayB3aXRoIGFkdWx0cywgdGhlIGNhcGFjaXRpZXMgdGhhdCAiaGFuZyB0b2dldGhlciIgaW4gb2xkZXIgY2hpbGRyZW4ncyByZWFzb25pbmcgd2hlbiB0YXJnZXQgY2hhcmFjYXRlcnMgYXJlIHBlcmNlaXZlZCB0byB2YXJ5IGluIG1lbnRhbCBjYXBhY2l0eSBwcm9maWxlcyBhcHBlYXIgdG8gYmUgaGlnaGx5IHNpbWlsaWFyIHRvIHRob3NlIHRoYXQgImhhbmcgdG9nZXRoZXIiIHdoZW4gcGFydGljaXBhbnRzIGRpc2FncmVlIGFib3V0IHRoZSBtZW50YWwgbGl2ZXMgb2YgY29udHJvdmVyc2lhbCAiZWRnZSBjYXNlcyIgaW4gc29jaWFsIHJlYXNvbmluZyAoU3R1ZHkgMSkuCgpSZWdhcmRpbmcgb3VyIHNlY29uZCBnb2FsLCBYWC4gW1hYIEluIGNvYXJzZXIgdGVybXMsIFhYIEJPRFktSEVBUlQgdnMuIE1JTkQuIFRoaXMgdHdvLWZhY3RvciBzdHJ1Y3R1cmUgaXMgYWxzbyByZW1pbmlzY2VudCBvZiBHcmF5IGV0IGFsLidzICgyMDA3KSAiZXhwZXJpZW5jZS1hZ2VuY3kiIGZyYW1ld29yazsgWFguIEJ1dCB0aGVyZSBhcmUgaGludHMgb2YgYSBuYXNjZW50IHRocmVlLWZhY3RvciBzdHJ1Y3R1cmUsIGNsb3NlciB0byBCT0RZLUhFQVJUX01JTkQgLSBub3QgZnVsbHkgd29ya2VkIG91dCwgZXNwZWNpYWxseSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBCT0RZIGFuZCBIRUFSVC4gSW5zdGVhZCBvZiBCT0RZIHZzLiBIRUFSVCwgbmVnYXRpdmUgdnMuIHBvc2l0aXZlLiBUaGUgc2FsaWVuY2Ugb24gbmVnYXRpdmUgdnMuIHBvc2l0aXZlIGV4cGVyaWVuY2VzIGFtb25nIHlvdW5nZXIgY2hpbGRyZW4gaXMgY29uc2lzdGVudCB3aXRoIHJlY2VudCB3b3JrIG9uIHRoZSBkZXZlbG9wbWVudCBvZiBlbW90aW9uIGNvbmNlcHRzLCB3aGljaCBzdWdnZXN0cyB0aGF0IGVtb3Rpb24gcmVwcmVzZW50YXRpb25zIGFyZSBkb21pbmFudGVkIGJ5IGEgc2luZ2xlIGRpbWVuc2lvbiBvZiB2YWxlbmNlIGluIGVhcmx5IHRvIG1pZGRsZSBjaGlsZGhvb2QsIGJlZm9yZSB1bmZvbGRpbmcgaW50byBhIHR3by1kaW1lbnNpb25hbCBzcGFjZSBjaGFyYWN0ZXJpemVkIGJ5IHZhbGVuY2UgYW5kIGFyb3VzYWwgb3ZlciB0aGUgY291cnNlIG9mIGxhdGVyIGNoaWxkaG9vZCBhbmQgYWRvbGVzZW5jZSAoTm9vayBldCBhbC4sIDIwMTcpLl0KClJlZ2FyZGluZyBvdXIgdGhpcmQgZ29hbCwgWFguIFtYWCBmdWxmaWxsIHRoZSBwcm9taXNlZCBzcGVjdWxhdGlvbnM6IHdoeSBkb2VzIGFuaW1hdGUvaW5hbmltYXRlIGRpc3RpbmN0aW9uIGRlY3JlYXNlIHdpdGggYWdlIGluIHRoZSBIRUFSVCBkb21haW4sIGFuZCB3aHkgZG9lc24ndCBpdCBpbmNyZWFzZSB3aXRoIGFnZSBpbiB0aGUgTUlORCBkb21haW4/XQoKIyBTdHVkeSAzCgpUaGUgcHJpbWFyeSBnb2FsIG9mIFN0dWR5IDMgd2FzIHRvIChjb25jZXB0dWFsbHkpIHJlcGxpY2F0ZSBhbmQgZXh0ZW5kIG91ciBmaW5kaW5ncyB3aXRoIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgMi4gSW4gbGlnaHQgb2YgdGhlIGNvbmNlcm5zIGFib3V0IHZvY2FidWxhcnksIGF0dGVudGlvbiwgYW5kIHVzZSBvZiB0aGUgcmVzcG9uc2Ugc2NhbGUgYW1vbmcgeW91bmdlciBjaGlsZHJlbiBpbiBTdHVkeSAyLCB3ZSBkZXNpZ25lZCBhbiBldmVuIG1vcmUgY2hpbGQtZnJpZW5kbHkgdmVyc2lvbiB3ZWxsIHN1aXRlZCBmb3IgeW91bmcgcHJlc2Nob29sZXJzLCBzdHJlYW1saW5pbmcgdGhlIGV4cGVyaW1lbnRhbCBwcm90b2NvbCwgcHJvdmlkaW5nIG1vcmUgc2NhZmZvbGRpbmcgZm9yIHRoZSByZXNwb25zZSBzY2FsZSwgYW5kIGluY2x1ZGluZyBvbmx5IHZvY2FidWxhcnkgaXRlbXMgdGhhdCB3ZXJlIHByZS10ZXN0ZWQgdG8gYmUgZmFtaWxpYXIgdG8geW91bmcgcHJlc2Nob29sIGNoaWxkcmVuIChzZWUgIk1ldGhvZCIpLiAKCkEgc2Vjb25kIGdvYWwgb2YgU3R1ZHkgMyB3YXMgdG8gYXNzZXNzIHlvdW5nZXIgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgbWVudGFsIGxpZmUgdG8gZWRnZSBjYXNlcy4gUmVjYWxsIHRoYXQsIGluIFN0dWR5IDEsIG9sZGVyIGNoaWxkcmVuIGF0dHJpYnV0ZWQgbW9yZSBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyAoImhlYXJ0IikgdG8gYm90aCBiZWV0bGVzIGFuZCByb2JvdHMgdGhhbiBkaWQgYWR1bHRzLCBkZXNwaXRlIHNoYXJpbmcgYWR1bHRzJyB0aHJlZS1wYXJ0IGNvbmNlcHR1YWwgc3RydWN0dXJlOyB0aGlzICJlZGdlIGNhc2UiIGFwcHJvYWNoIG9mIFN0dWR5IDEgYWxsb3dlZCB1cyB0byBlc3RpbWF0ZSBvbGRlciBjaGlsZHJlbidzIGFnZ3JlZ2F0ZSBhdHRyaWJ1dGlvbnMgdG8gdGhlc2UgZW50aXRpZXMgd2l0aCBwcmVjaXNpb24gYW5kIHRvIGNoYXJ0IGNoYW5nZXMgaW4gdGhlc2UgYXR0cmlidXRpb25zIG92ZXIgYWdlIGNvbnRpbnVvdXNseSB3aXRoaW4gdGhlIHJhbmdlIG9mIDctOSB5ZWFycywgYmVjYXVzZSBsYXJnZSBudW1iZXJzIG9mIGNoaWxkcmVuIGFzc2Vzc2VkIGVhY2ggb2YgdGhlIHR3byB0YXJnZXQgY2hhcmFjdGVycyAocmF0aGVyIHRoYW4gcGFydGljaXBhbnRzIGJlaW5nIGRpc3RyaWJ1dGVkIGFjcm9zcyBhIHdpZGVyIHJhbmdlIG9mIHRhcmdldCBjaGFyYWN0ZXJzKS4gSW4gU3R1ZHkgMywgd2UgcmV0dXJuZWQgdG8gdGhpcyBhcHByb2FjaCwgbGltaXRpbmcgdGhlIHRhcmdldCBjaGFyYWN0ZXJzIHRvIGEgYmVldGxlIGFuZCBhIHJvYm90LCBzbyBhcyB0byBmb2xsb3cgdXAgb24gdGhpcyBzZWNvbmRhcnkgZmluZGluZyB3aXRoIGEgeW91bmdlciBncm91cCBvZiBjaGlsZHJlbi4gCgpGaW5hbGx5LCBTdHVkeSAzIHdhcyBkZXNpZ25lZCBpbiBhbnRpY2lwYXRpb24gb2YgZGV2ZWxvcGluZyBwYXJ0aWNpcGFudC1sZXZlbCBhbmFseXNlcyB0byBzdXBwbGVtZW50IHRoZSBncm91cC1sZXZlbCBFRkFzIGRpc2N1c3NlZCBzbyBmYXIgKHNlZSAiQ29udGludW91cyBkZXZlbG9wbWVudCBhdCB0aGUgcGFydGljaXBhbnQgbGV2ZWw6IEEgcmUtYW5hbHlzaXMgb2YgU3R1ZGllcyAxLTMsIiBiZWxvdykuIFdpdGggdGhpcyBnZW5lcmFsIGdvYWwgaW4gbWluZCwgd2UgYXNrZWQgZWFjaCBjaGlsZCB0byBhc3Nlc3MgdGhlIG1lbnRhbCBjYXBhY2l0aWVzIG9mIGJvdGggYSBiZWV0bGUgYW5kIGEgcm9ib3QsIHNvIGFzIHRvIG1heGltaXplIHRoZSBudW1iZXIgb2Ygb2JzZXJ2YXRpb25zIHBlciBwYXJ0aWNpcGFudCBmb3IgdGhlc2UgYW50aWNpcGF0ZWQgcGFydGljaXBhbnQtbGV2ZWwgYW5hbHlzZXMuCgojIyBNZXRob2QKCiMjIyBQYXJ0aWNpcGFudHMKClhYIHBlb3BsZSBwYXJ0aWNpcGF0ZWQgaW4gdGhpcyBzdHVkeS4KCkFkdWx0cyAobj1YWCkgcGFydGljaXBhdGVkIHZpYSBBbWF6b24gTWVjaGFuaWNhbCBUdXJrIChNVHVyaykgaW4gU2VwdGVtYmVyIDIwMTguIEFkdWx0IHBhcnRpY2lwYW50cyBoYWQgZ2FpbmVkIGFwcHJvdmFsIGZvciBhdCBsZWFzdCA5NSUgb2YgdGhlaXIgcHJldmlvdXMgd29yayBvbiBNVHVyazsgaGFkIE1UdXJrIGFjY291bnRzIGJhc2VkIGluIHRoZSBVUzsgYW5kIGluZGljYXRlZCB0aGF0IHRoZXkgd2VyZSBhdCBsZWFzdCAxOCB5ZWFycyBvbGQuIEFkdWx0cyB3ZXJlIHBhaWQgJDAuNzUgZm9yIGFwcHJveGltYXRlbHkgWFggbWludXRlcyBvZiB0aGVpciB0aW1lIChtZWRpYW4gZHVyYXRpb246IFhYIG1pbikuIEFuIGFkZGl0aW9uYWwgWFggYWR1bHRzIHBhcnRpY2lwYXRlZCBidXQgd2VyZSBleGNsdWRlZCBmb3IgZmFpbGluZyB0byBwYXNzIG9uZSBvciBtb3JlIGF0dGVudGlvbiBjaGVja3MgKGUuZy4sICJQbGVhc2Ugc2VsZWN0IG5vIjsgbj1YWCkgb3IgZm9yIGZhaWxpbmcgdG8gcmVzcG9uZCBzZW5zaWJseSB0byBhbiBvcGVuLWVuZGVkIHF1ZXN0aW9uIGFib3V0IHdoYXQgdGhleSBoYWQgYmVlbiBhc2tlZCB0byBkbyBpbiB0aGUgc3R1ZHkgKHNlZSBTdHVkeSAzIGZvciBleGFtcGxlczsgbj1YWCkuCgpBbW9uZyB0aGUgZmluYWwgc2FtcGxlIG9mIFhYIGFkdWx0cywgWFglIGlkZW50aWZpZWQgYXMgd29tZW4gYW5kIFhYJSBhcyBtZW4uIEFkdWx0cyBwcmVkb21pbmFudGx5IGlkZW50aWZpZWQgYXMgV2hpdGUgKFhYJTsgWFglIGFzIEJsYWNrLCBYWCUgYXMgQXNpYW47IFhYJSBhcyBYWCksIGFuZCByZXBvcnRlZCBiZWluZyBiZXR3ZWVuIFhYIGFuZCBYWCB5ZWFycyBvZiBhZ2UgKG1lZGlhbiBhZ2U6IFhYIHllYXJzKS4gWFggT1RIRVIgREVNT0dSQVBISUNTOiBOYXRpdmUgbGFuZ3VhZ2UsIGVkdWNhdGlvbiwgcmVsaWdpb24gYXMgYSBjaGlsZCwgcmVsaWdpb24gbm93LCBqb2IuClhYIGNoaWxkcmVuIHBhcnRpY2lwYXRlZCBpbiB0aGlzIHN0dWR5LCB3aGljaCB3YXMgY29uZHVjdGVkIGJldHdlZW4gSmFudWFyeSAyMDE4IGFuZCBYWCAyMDE4LiBPdXIgcGxhbm5lZCBzYW1wbGUgc2l6ZSB3YXMgMTAwIGNoaWxkcmVuLCBidXQgd2UgYWxzbyByZXRhaW5lZCBhIGhhbmRmdWwgb2YgZXh0cmEgcGFydGljaXBhbnRzIHdobyBjb21wbGV0ZWQgdGhlIHN0dWR5IG9uIHRoZSBmaW5hbCBkYXlzIG9mIGRhdGEgY29sbGVjdGlvbi4gQ2hpbGRyZW4gcmFuZ2VkIGluIGFnZSBmcm9tIDQuMDAtWFh5IChtZWRpYW46IFhYeSksIGFuZCBwYXJ0aWNpcGF0ZWQgYXQgdGhlaXIgcHJlc2Nob29sOyBleGFjdCBkdXJhdGlvbiB3YXMgbm90IHJlY29yZGVkLCBidXQgdGhlIGZ1bGwgc3R1ZHkgc2Vzc2lvbiBnZW5lcmFsbHkgdG9vayBsZXNzIHRoYW4gMTAgbWludXRlcy4gQWNjb3JkaW5nIHRvIHNjaG9vbCByZWNvcmRzLCBYWCBjaGlsZHJlbiAoWFglKSB3ZXJlIGdpcmxzIGFuZCBYWCAoWFglKSB3ZXJlIGJveXM7IGZvciBYWCBjaGlsZHJlbiAoWFgpIGdlbmRlciB3YXMgZWl0aGVyIG5vbi1iaW5hcnkgb3IgdW5rbm93bi4gUGFyZW50cyBwcmVkb21pbmFudGx5IGlkZW50aWZpZWQgdGhlaXIgY2hpbGRyZW4gYXMgV2hpdGUgKFhYJSkgb3IgQXNpYW4gKFhYJTsgWFglIGFzIEJsYWNrLCBYWCUgYXMgQXNpYW47IFhYJSBhcyBYWCkuIFhYIE9USEVSIERFTU9HUkFQSElDUy4KCkFuIGFkZGl0aW9uYWwgWFggY2hpbGRyZW4gcGFydGljaXBhdGVkIGJ1dCB3ZXJlIGV4Y2x1ZGVkIGZvciBiZWluZyBvdXRzaWRlIHRoZSB0YXJnZXQgYWdlIHJhbmdlLiAKCiMjIyBNYXRlcmlhbHMgYW5kIHByb2NlZHVyZSAKCk1hdGVyaWFscyBhbmQgcHJvY2VkdXJlIHdlcmUgYWRhcHRlZCB0byBiZSBtb3JlIGFwcHJvcHJpYXRlIGZvciB5b3VuZyBwcmVzY2hvb2xlcnMsIHdpdGggdHdvIHByaW1hcnkgZ29hbHMgaW4gbWluZDogU3RyZWFtbGluaW5nIHRoZSBleHBlcmltZW50YWwgcHJvdG9jb2wgdG8gaW1wcm92ZSBjaGlsZHJlbidzIGNvbXByZWhlbnNpb24gYW5kIGF0dGVudGlvbiB0byB0aGUgdGFzaywgYW5kIGxpbWl0aW5nIG1lbnRhbCBjYXBhY2l0aWVzIHRvIHdvcmRzIHRoYXQgYXJlIGhpZ2hseSBmYW1pbGlhciB0byB5b3VuZyBwcmVzY2hvb2wgY2hpbGRyZW4uCgpJbiBvcmRlciB0byBzdHJlYW1saW5lIHRoZSBleHBlcmltZW50YWwgcHJvdG9jb2wsIHdlIG1vdmVkIHRoZSB0YXNrIG9mZiBvZiB0aGUgY29tcHV0ZXIgKGZvciBjaGlsZHJlbiBidXQgbm90IGFkdWx0cyksIGluc3RlYWQgdXNpbmcgcHJpbnRlZCBwaG90b2dyYXBocyBvZiB0aGUgdGFyZ2V0IGNoYXJhY3RlcnMgKG1lYXN1cmluZyBhcHByb3hpbWF0ZWx5IDUgeCA4IGluY2hlcywgcHJpbnRlZCBpbiBjb2xvciBhbmQgbGFtaW5hdGVkKSBhbmQgcmVjb3JkaW5nIGNoaWxkcmVuJ3MgcmVzcG9uc2VzIGJ5IGhhbmQgKHJhdGhlciB0aGFuIHVzaW5nIHRoZSBjb21wdXRlcikuIEF0IHRoZSB0aW1lIG9mIHRlc3RpbmcsIHRoZSBleHBlcmltZW50ZXIgYW5kIGNoaWxkIHNhdCBzaWRlIGJ5IHNpZGUsIHdpdGggdGhlIHBob3RvZ3JhcGggcGxhY2VkIGRpcmVjdGx5IGluIGZyb250IG9mIHRoZSBjaGlsZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB0YXNrLiAKCldlIGFsc28gc3RyZWFtbGluZWQgdGhlIGludHJvZHVjdGlvbiB0byB0aGUgdGFzay4gVGhlIGV4cGVyaW1lbnRlciBiZWdhbiBieSBwbGFjaW5nIHRoZSBwaG90b2dyYXBoIG9mIHRoZSBmaXJzdCB0YXJnZXQgY2hhcmFjdGVyIGluIGZyb250IG9mIHRoZSBjaGlsZCBhbmQgYXNraW5nLCAiQ2FuIHlvdSB0ZWxsIG1lIHdoYXQgdGhpcyBpcz8iIElmIGEgY2hpbGQgcHJvdmlkZWQgYW4gYW5zd2VyIG90aGVyIHRoYW4gImJlZXRsZSIgb3IgInJvYm90LCIgdGhlIGV4cGVyaW1lbnRlciBzYWlkLCAiSSdtIGdvaW5nIHRvIGNhbGwgaXQgYSBbYmVldGxlL3JvYm90XS4iIFRoZW4gdGhlIGV4cGVyaW1lbnRlciBzYWlkLCAiV2UncmUgZ29pbmcgdG8gcGxheSBhIGdhbWUgYWJvdXQgW2JlZXRsZXMvcm9ib3RzXSwiIHJlbWluZGVkIGNoaWxkcmVuLCAiaWYgeW91IGV2ZXIgd2FudCB0byBzdG9wIHBsYXlpbmcsIHlvdSBjYW4ganVzdCBsZXQgbWUga25vdyBhbmQgd2UnbGwgZ28gYmFjayB0byB0aGUgY2xhc3Nyb29tIiAocGVyIHByZXNjaG9vbCBwcm90b2NvbCksIGFuZCB0aGVuIGxhdW5jaGVkIGludG8gdGhlIGZpcnN0IHF1ZXN0aW9uIChlLmcuLCAiQ2FuIGJlZXRsZXMgZ2V0IHNhZD8iKS4KCldlIHNjYWZmb2xkZWQgY2hpbGRyZW4ncyB1c2Ugb2YgdGhlIHRocmVlLXBvaW50IHJlc3BvbnNlIHNjYWxlIGJ5IHByb3ZpZGluZyBhIHBoeXNpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzY2FsZSwgY29uc2lzdGluZyBvZiB0aHJlZSBsYXJnZSBib3hlcywgc2VwYXJhdGVkIGJ5IGJsYW5rIHNwYWNlLCBjb250YWluaW5nIHRoZSB3b3JkcyBOTywgS0lOREEsIGFuZCBZRVMgd3JpdHRlbiBpbiBsYXJnZSBmb250IHdpdGggYWxsIGNhcGl0YWwgbGV0dGVycyAodG8gYWlkIGNoaWxkcmVuIHdpdGggYXQgbGVhc3Qgc29tZSByZWFkaW5nIHNraWxscyBpbiByZWNvZ25pemluZyB0aGVzZSB3b3Jkcyk7IGNvbG9yLWNvZGVkIGFjY29yZGluZyB0byB0aGUgaW50ZW5zaXR5IG9mIHJlc3BvbnNlIChOTyA9IHZlcnkgbGlnaHQgYmx1ZSwgS0lOREEgPSBtZWRpdW0gYmx1ZSwgWUVTID0gZGFyayBibHVlKTsgYW5kIG9yZGVyZWQgZnJvbSBsZWZ0IChOTykgdG8gcmlnaHQgKFlFUykuIEVhY2ggYm94IG1lYXN1cmVkIGFwcHJveGltYXRlbHkgMiB4IDQgaW5jaGVzOyB0aGUgYm94ZXMgd2VyZSBsYW1pbmF0ZWQgd2l0aCBzbGlnaHRseSBsZXNzIHRoYW4gMSBpbmNoIG9mIGVtcHR5IHNwYWNlIGJldHdlZW4gdGhlbSAodGhyb3VnaCB3aGljaCB0aGUgdGFibGUgd2FzIHZpc2libGUpLiBJbiBhZGRpdGlvbiB0byBwcm92aWRpbmcgdGhlc2UgdmlzdWFsIGFuZCBzcGF0aWFsIGN1ZXMgdG8gdGhlIGZhY3QgdGhhdCB0aGVyZSB3ZXJlIHRocmVlIHJlc3BvbnNlIG9wdGlvbnPigJRubywgeWVzLCBhbmQgc29tZXRoaW5nIGNvbmNlcHR1YWxseSBhbmQgbGl0ZXJhbGx5ICJpbiBiZXR3ZWVuIiB0aGVzZSBleHRyZW1lc+KAlHdlIGFsc28gYWRkZWQgYSBsaW5lIHRvIHRoZSBleHBlcmltZW50ZXIncyBzY3JpcHQgZGVzY3JpYmluZyAoYW5kIHRoZW4gcmVpdGVyYXRpbmcpIHRoZXNlIHJlc3BvbnNlIG9wdGlvbnMgb24gdGhlIGZpcnN0IHRocmVlIHRyaWFscyAoIllvdSBjYW4gc2F5IG5vIFtwb2ludGluZyB0byBOT10sIGtpbmRhIFtwb2ludGluZyB0byBLSU5EQV0sIG9yIHllcyBbcG9pbnRpbmcgdG8gWUVTXSIpLiBUaGUgZXhwZXJpbWVudGVyIHJlcGVhdGVkIHRoZXNlIG9wdGlvbnMgb24gdGhlIGZpcnN0IHRocmVlIHRyaWFscyBmb3IgYWxsIGNoaWxkcmVuLCBhbmQgb24gYW55IG90aGVyIHRyaWFscyB3aGVyZSBhIGNoaWxkIHRvb2sgbW9yZSB0aGFuIGEgZmV3IHNlY29uZHMgdG8gYW5zd2VyIG9yIHByb3ZpZGVkIGEgcmVzcG9uc2Ugb3RoZXIgdGhhbiBzYXlpbmcgInllcywiICJraW5kYSwiIG9yICJubyIgb3IgY2xlYXJseSBwb2ludGluZyB0byBvbmUgb2YgdGhlc2Ugb3B0aW9ucyBvbiB0aGUgcmVzcG9uc2Ugc2NhbGUuCgpGb3IgZWFjaCB0YXJnZXQgY2hhcmFjdGVyLCBjaGlsZHJlbiBhbnN3ZXJlZCAxOCBxdWVzdGlvbnMgYWJvdXQgaXRzIG1lbnRhbCBjYXBhY2l0aWVzLiBUaGVzZSBxdWVzdGlvbnMgd2VyZSBkZXNpZ25lZCB0byBpbmNsdWRlIHNpeCBjbGVhciBleGFtcGxlcyBvZiBib2RpbHksIHNvY2lhbC1lbW90aW9uYWwsIGFuZCBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMsIGFjY29yZGluZyB0byBTdHVkaWVzIDEtMiBhbmQgV2Vpc21hbiBldCBhbC4ncyAoMjAxNykgb3JpZ2luYWwgc3R1ZGllcyB3aXRoIFVTIGFkdWx0cy4gQm9kaWx5IGFiaWxpdGllcyBpbmNsdWRlZCBmZWVsIGh1bmdyeSwgZ2V0IHRoaXJzdHksIGZlZWwgc2ljaywgZmVlbCB0aXJlZCwgZ2V0IHNjYXJlZCwgYW5kIHNtZWxsIHRoaW5ncy4gU29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgaW5jbHVkZWQgbG92ZSBzb21lb25lLCBoYXRlIHNvbWVvbmUsIGZlZWwgaGFwcHksIGdldCBzYWQsIGZlZWwgc29ycnksIGdldCBsb25lbHkuIFBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyBpbmNsdWRlZCBzZWUsIGhlYXIsIHRoaW5rLCByZW1lbWJlciB0aGluZ3MsIGtub3cgc3R1ZmYsIGZpZ3VyZSB0aGluZ3Mgb3V0LiBUaGVzZSBpdGVtcyB3ZXJlIGNob3NlbiB0byBhcyBzaG9ydCBhcyBwb3NzaWJsZSBhbmQgaGlnaGx5IGZhbWlsaWFyIHRvIHlvdW5nIHByZXNjaG9vbCBjaGlsZHJlbjsgdGhleSB3ZXJlIHNlbGVjdGVkIGZyb20gYSBsYXJnZXIgcGlsb3Qgc3R1ZHkgaW4gd2hpY2ggd2UgYXNrZWQgMy0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiB0byBjb21wbGV0ZSBzdG9yaWVzIHRoYXQgYmVnYW4gd2l0aCBlYWNoIG9mIHRoZXNlIG1lbnRhbCBjYXBhY2l0aWVzIGFzIGEgcHJlbWlzZSAoZS5nLiwgIkxldCdzIGltYWdpbmUgYSBwZXJzb24gd2hvIGxvdmVzIHNvbWVvbmUuIFdoYXQgaGFwcGVucyBuZXh0PyI7ICJOb3cgbGV0J3MgcHJldGVuZCB0aGF0IHNvbWVvbmUgcmVtZW1iZXJzIHNvbWV0aGluZy4gV2hhdCBoYXBwZW5zIG5leHQ/IikgYW5kIGp1ZGdlZCB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHRoZWlyIHN0b3J5IGNvbXBsZXRpb24uIFdlIGZ1cnRoZXIgZGVzaWduZWQgdGhlIHNldCBvZiBpdGVtcyBzbyB0aGF0IGVhY2ggY2F0ZWdvcnkgaW5jbHVkZWQgYSB2YXJpZXR5IG9mIHBocmFzaW5ncyAoZS5nLiwgZmVlbCBodW5ncnkgdnMuIGdldCB0aGlyc3R5OyByZW1lbWJlciB0aGluZ3MgdnMuIGtub3cgc3R1ZmYpIGFuZCB2YWxlbmNlcyB3aGVuIGFwcHJvcHJpYXRlIChlLmcuLCBmZWVsIGhhcHB5IHZzLiBnZXQgc2FkKTsgd2hlbiBwb3NzaWJsZSwgd2UgYWltZWQgdG8gaGF2ZSBwaHJhc2luZ3MgdmFyeSBvcnRob2dvbmFsbHkgd2l0aCBjYXRlZ29yaWVzLCBzdWNoIHRoYXQgImdldCIgYW5kICJmZWVsIiBhcHBlYXJlZCByb3VnaGx5IGVxdWFsbHkgb2Z0ZW4gYW1vbmcgdGhlIGJvZGlseSBhbmQgc29jaWFsLWVtb3Rpb25hbCBpdGVtcywgYW5kICJ0aGluZ3MiIGFwcGVhcmVkIGVxdWFsbHkgb2Z0ZW4gYW1vbmcgdGhlIGJvZGlseSBhbmQgcGVyY2VwdHVhbC1jb2duaXRpdmUgaXRlbXMuIEFzIGluIFN0dWRpZXMgMS0yLCBlYWNoIG1lbnRhbCBjYXBhY2l0eSB3YXMgYXNzb2NpYXRlZCB3aXRoIGEgc2hvcnQsIHByZXNldCBkZWZpbml0aW9uLCB3aGljaCB3YXMgcmVhZCB0byBjaGlsZHJlbiBpZiB0aGV5IGV4cHJlc3NlZCB1bmNlcnRhaW50eSBhYm91dCB3aGF0IGEgd29yZCBtZWFudCBvciBkaWQgbm90IHJlc3BvbmQgYWZ0ZXIgcHJvbXB0aW5nIHVzZSBvZiB0aGUgcmVzcG9uc2Ugc2NhbGUuCgpDaGlsZHJlbiBmaXJzdCBhc3Nlc3NlZCBhbGwgMTggbWVudGFsIGNhcGFjaXRpZXMgZm9yIG9uZSBvZiB0aGUgdGFyZ2V0IGNoYXJhY3RlcnMgKGUuZy4sIHRoZSBiZWV0bGUpLCB0aGVuIGNvbXBsZXRlZCBhbiBlYXN5IGppZ3NhdyBwdXp6bGUgZmVhdHVyaW5nIGNsb3RoaW5nIGFuZCBhY2Nlc3NvcmllcyBhcHByb3ByaWF0ZSBmb3IgYSByYWlueSBkYXkgKHdoaWNoIHRvb2sgYWJvdXQgMzAtNjAgc2Vjb25kIHRvIGNvbXBsZXRlKSwgYW5kIGZpbmFsbHkgYXNzZXNzZWQgYWxsIDE4IG1lbnRhbCBjYXBhY2l0aWVzIGZvciB0aGUgb3RoZXIgdGFyZ2V0IGNoYXJhY3RlciAoZS5nLiwgdGhlIHJvYm90KS4KClRoaXMgbW9kaWZpZWQgcHJvY2VkdXJl4oCUcGFydGljdWxhcmx5IG1vdmluZyB0aGUgZXhwZXJpbWVudCBvZmYgb2YgdGhlIGNvbXB1dGVyIGZvciBjaGlsZHJlbuKAlHJlcXVpcmVkIGNoYW5nZXMgdG8gdGhlIGV4cGVyaW1lbnRhbCBkZXNpZ24uIFJhdGhlciB0aGFuIHJhbmRvbWx5IGFzc2lnbmluZyBjaGlsZHJlbiB0byBhc3Nlc3MgdGhlIGJlZXRsZSBmaXJzdCBvciB0aGUgcm9ib3QgZmlyc3QsIHRoZSBvcmRlciBvZiB0YXJnZXQgY2hhcmFjdGVycyB3YXMgY291bnRlcmJhbGFuY2VkIGluIGFkdmFuY2UuIExpa2V3aXNlLCByYXRoZXIgdGhhbiBhc2tpbmcgYWJvdXQgdGhlIDE4IG1lbnRhbCBjYXBhY2l0aWVzIGluIGEgcmFuZG9tIG9yZGVyLCBxdWVzdGlvbnMgYWJvdXQgdGhlIGZpcnN0IHRhcmdldCBjaGFyYWN0ZXIgd2VyZSBhc2tlZCBpbiBvbmUgb2YgOCBwcmUtbWFkZSByYW5kb20gb3JkZXJzLCBhbmQgcXVlc3Rpb25zIGFib3V0IHRoZSBzZWNvbmQgdGFyZ2V0IGNoYXJhY3RlciB3ZXJlIGFza2VkIGluIHRoZSByZXZlcnNlIG9yZGVyLiBUaGUgb3JkZXIgb2YgdGhlIHRhcmdldCBjaGFyYWN0ZXJzIChiZWV0bGUtcm9ib3Qgb3Igcm9ib3QtYmVldGxlKSBhbmQgdGhlIG9yZGVyIG9mIHRoZSBtZW50YWwgY2FwYWNpdHkgcXVlc3Rpb25zICgxLTgpIHdlcmUgZnVsbHkgY3Jvc3NlZCBhY3Jvc3MgcGFydGljaXBhbnRzLiAKCkFkdWx0cyBwYXJ0aWNpcGF0ZWQgaW4gYW4gb25saW5lIHZlcnNpb24gb2YgdGhpcyBzYW1lIHRhc2ssIHdpdGhvdXQgYSBicmVhayBiZXR3ZWVuIHRhcmdldCBjaGFyYWN0ZXJzLiBBcyBpbiBTdHVkaWVzIDEgYW5kIDIsIGFkdWx0cyBjbGlja2VkIHRocm91Z2ggYSB3ZWJzaXRlIGF0IHRoZWlyIG93biBwYWNlLCB3aXRoIG9uZSB0cmlhbCBwcmVzZW50ZWQgb24gZWFjaCBwYWdlIGFuZCBubyBhYmlsaXR5IHRvIGdvIGJhY2t3YXJkcy4gCgojIyMgRGF0YSBwcm9jZXNzaW5nCgpXZSBkaWQgbm90IHJlY29yZCByZXNwb25zZSB0aW1lcyBvciB1c2UgdGhpcyBhcyBhIGNyaXRlcmlvbiBmb3IgaW5jbHVzaW9uLiBBcyBpbiBTdHVkaWVzIDEtMiwgd2UgcmV0YWluZWQgcGFydGljaXBhbnRzIHJlZ2FyZGxlc3Mgb2Ygc2tpcHBlZCB0cmlhbHMgKG49WFggdHJpYWxzOyBYWCUgb2YgYWxsIHRyaWFscykuCgojIyBSZXN1bHRzCgpYWAoKIyMgRGlzY3Vzc2lvbgoKWFgKCiMgQXNzZXNzaW5nIGFnZS1yZWxhdGVkIGNoYW5nZXMgaW4gY29uY2VwdHVhbCBzdHJ1Y3R1cmUgY29udGludW91c2x5OiBBIHJlLWFuYWx5c2lzIG9mIFN0dWRpZXMgMS0zCgpUYWtlbiB0b2dldGhlciwgZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2VzIChFRkFzKSBvZiBkaWZmZXJlbnQgYWdlIGdyb3VwcyBzdWdnZXN0IHRoYXQgdGhhdCBjb25jZXB0dWFsIHN0cnVjdHVyZSB1bmRlcmx5aW5nIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4ncyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIChTdHVkaWVzIDItMykgZGlmZmVycyBmcm9tIHRoZSBjb25jZXB0dWFsIHN0cnVjdHVyZSB1bmRlcmx5aW5nIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyBhbmQgYWR1bHRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIChTdHVkaWVzIDEtMikuIFRoaXMgZGF0YS1kcml2ZW4sICJib3R0b20tdXAiIGFwcHJvYWNoIHRvIGluZmVycmluZyBjb25jZXB0dWFsIHN0cnVjdHVyZSBhdCB0aGUgZ3JvdXAgbGV2ZWwgcHJvdmlkZXMgbm92ZWwgaW5zaWdodHMgaW50byBob3cgY2hpbGRyZW4ncyByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgbWlnaHQgZXZvbHZlIGFjcm9zcyBjaGlsZGhvb2QgdGhhdCB3ZSB3b3VsZCBub3QgaGF2ZSBhbnRpY2lwYXRlZCBhIHByaW9yaS4gQSBzaW1pbGFyIHBhdHRlcm4gb2YgZGlmZmVyZW5jZXMgYmV0d2VlbiB5b3VuZ2VyIGFuZCBvbGRlciBjaGlsZHJlbiBlbWVyZ2VkIG9yZ2FuaWNhbGx5IGFjcm9zcyBtdWx0aXBsZSBzdHVkaWVzIChTdHVkeSAyIGFuZCBTdHVkaWVzIDEgdnMuIDMpLCBnaXZpbmcgdXMgcmVhc29uIHRvIHRoaW5rIHRoYXQgdGhleSByZWZsZWN0IHNvbWV0aGluZyByZWFsIGFib3V0IGNoaWxkcmVuJ3MgZGV2ZWxvcGluZyB1bmRlcnN0YW5kaW5nIG9mIG1lbnRhbCBsaWZlLgoKSG93ZXZlciwgdGhpcyBhcHByb2FjaCB0byBhbmFseXppbmcgZGF0YSBjb21lcyBhdCBzb21lIGNvc3QuIEVGQSBpcyBhIGdyb3VwLWxldmVsIGFuYWx5c2lzLCBjYXBhYmxlIG9mIHJldmVhbGluZyBsYXRlbnQgc3RydWN0dXJlcyB1bmRlcmx5aW5nIGNvdmFyaWFuY2UgcGF0dGVybnMgYWNyb3NzIGEgbGFyZ2Ugc2V0IG9mIG9ic2VydmF0aW9uczsgdXNpbmcgdGhpcyBhcHByb2FjaCB0byBzdHVkeSBjb25jZXB0dWFsIHN0cnVjdHVyZSBhdCB0aGUgaW5kaXZpZHVhbCBsZXZlbCB3b3VsZCByZXF1aXJlIGh1bmRyZWRzIG9mIG9ic2VydmF0aW9ucyBwZXIgcGFydGljaXBhbnQsIHdoaWNoIGlzIG5vdCBmZWFzaWJsZSB3aXRoIHlvdW5nIGNoaWxkcmVuLiBFdmVuIGNvbGxlY3RpbmcgZW5vdWdoIG9ic2VydmF0aW9ucyBwZXIgYWdlIGdyb3VwIHdhcyBubyBzbWFsbCBmZWF0OyBpbiBvcmRlciB0byBmYWNpbGl0YXRlIGRhdGEgY29sbGVjdGlvbiBmb3IgU3R1ZGllcyAxLTMgd2Ugb3B0ZWQgZm9yIGZhaXJseSB3aWRlIGFnZSByYW5nZXMgc3Bhbm5pbmcgMyB5ZWFycyBmb3IgZWFjaCBncm91cCAoNC02IHllYXJzIGFuZCA3LTkgeWVhcnMpLiBDYXRlZ29yaXppbmcgY2hpbGRyZW4gYXMgInlvdW5nZXIiIHZzLiAib2xkZXIiIHVzaW5nIHN1Y2ggd2lkZSBhZ2UgcmFuZ2VzIGhhcyBwcm92aWRlZCBpbnRyaWd1aW5nIHNuYXAtc2hvdHMgb2YgY2hpbGRyZW4gYXQgZGlmZmVyZW50IHBvaW50cyBpbiBkZXZlbG9wbWVudOKAlGJ1dCB0aGlzIGlzLCBvZiBjb3Vyc2UsIGEgcmF0aGVyIGNydWRlIHdheSBvZiBjaGFyYWN0ZXJpemluZyBkZXZlbG9wbWVudGFsIGNoYW5nZS4gCgpCZXR3ZWVuIFN0dWRpZXMgMS0zLCBob3dldmVyLCBhIHRvdGFsIG9mIDU0NSBjaGlsZHJlbiBiZXR3ZWVuIHRoZSBhZ2VzIG9mIDQuMDAtOS45OSB5ZWFycyBlYWNoIHByb3ZpZGVkIGJldHdlZW4gMjAtNDAgcmVzcG9uc2VzIHRvIHF1ZXN0aW9ucyBhYm91dCB2YXJpb3VzIHRhcmdldCBjaGFyYWN0ZXJzJyBtZW50YWwgY2FwYWNpdGllcy4gV2l0aCBhIGRpZmZlcmVudCBraW5kIG9mIGFuYWx5c2lzLCB0aGlzIGRhdGFzZXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gYWRkcmVzcyBxdWVzdGlvbnMgYWJvdXQgY29uY2VwdHVhbCBkZXZlbG9wbWVudCBhdCBhIG11Y2ggbW9yZSBmaW5lLWdyYWluZWQgbGV2ZWwgdGhhbiB3aGF0IGdyb3VwLWxldmVsIEVGQXMgaGF2ZSByZXZlYWxlZCBzbyBmYXIuIFdpdGggdGhpcyBpbiBtaW5kLCB3ZSBub3cgcHJlc2VudCBhIG5vdmVsIHJlLWFuYWx5c2lzIG9mIFN0dWRpZXMgMS0zLCBhaW1lZCBhdCBjaGFyYWN0ZXJpemluZyBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBpbiBjb25jZXB0dWFsIHN0cnVjdHVyZSBjb250aW51b3VzbHkgYWNyb3NzIGRldmVsb3BtZW50LiBPdXIgZ29hbCBpbiB0aGVzZSBwb3N0LWhvYyBhbmFseXNlcyB3YXMgdG8gYXNzZXNzIHRoZSBkaWZmZXJlbnRpYXRpb24gb2Ygd2hhdCB3ZSd2ZSBjYWxsZWQgYm9keSwgaGVhcnQsIGFuZCBtaW5kIGluIGluZGl2aWR1YWwgY2hpbGRyZW7igJRhIGtpbmQgb2Ygbm9uLXBhcmFtZXRyaWMsIHBhcnRpY2lwYW50LSBsZXZlbCBhbmFseXNpcyBtZWFudCB0byBwYXJhbGxlbCB0aGUgRUZBcyByZXBvcnRlZCBhYm92ZS4gCgpXZSBiYXNlZCB0aGlzIGFuYWx5c2lzIG9uIHRoZSBpbnR1aXRpb24gdGhhdCBhIGNoaWxkIHdobyBkaWZmZXJlbnRpYXRlcyBjbGVhcmx5IGJldHdlZW4gdHdvIGNhdGVnb3JpZXMgb2YgbWVudGFsIGNhcGFjaXRpZXMgKGUuZy4sIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyBvZiB0aGUgYm9keSB2cy4gc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgb2YgdGhlIGhlYXJ0KSB3aWxsIGV2YWx1YXRlIG1lbnRhbCBjYXBhY2l0aWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2F0ZWdvcmllcyBzb21ld2hhdCBpbmRlcGVuZGVudGx5LiBTdWNoIGEgY2hpbGQgd2lsbCBzb21ldGltZXMgZW5kIHVwIGVuZG9yc2luZyBtZW50YWwgY2FwYWNpdGllcyBpbiBvbmUgY2F0ZWdvcnkgd2hpbGUgcmVqZWN0aW5nIG1lbnRhbCBjYXBhY2l0aWVzIGluIHRoZSBvdGhlciAoZS5nLiwgZW5kb3JzaW5nIG1vc3QgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIGJ1dCByZWplY3RpbmcgbW9zdCBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcynigJR3aGVyZWFzIGEgY2hpbGQgd2hvIGRvZXMgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGVzZSBjYXRlZ29yaWVzIG1pZ2h0IGJlIG1vcmUgbGlrZWx5IHRvIGVuZG9yc2Ugb3IgcmVqZWN0IGFjcm9zcyB0aGUgYm9hcmQgKGUuZy4sIGVuZG9yc2luZyBlcXVhbCBudW1iZXJzIG9mIHBoeXNpb2xvZ2ljYWwgYW5kIHNvY2lhbC1lbW90aW9uYWwgaXRlbXMpLiBPZiBjb3Vyc2UsIGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IGNoYXJhY3RlciB0aGV5IGhhcHBlbiB0byBldmFsdWF0ZSwgZXZlbiBjaGlsZHJlbiB3aXRoIGNsZWFybHkgZGlmZmVyZW50aWF0ZWQgY2F0ZWdvcmllcyBtaWdodCBlbmQgdXAgZW5kb3JzaW5nIGVxdWFsIG51bWJlcnMgb2YgY2FwYWNpdGllcyBpbiBib3RoLiBCdXQgaWYgdGhlIGRpZmZlcmVudGlhdGlvbiBvZiB0d28gY2F0ZWdvcmllcyBiZWNvbWVzIHN0cm9uZ2VyIG92ZXIgZGV2ZWxvcG1lbnQsIHdlIG1pZ2h0IGV4cGVjdCB0aGF0LCBvbiBhdmVyYWdlLCB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgbnVtYmVyIG9mIGVuZG9yc2VtZW50cyBiZXR3ZWVuIHRoZXNlIGNhdGVnb3JpZXMgd291bGQgaW5jcmVhc2Ugd2l0aCBhZ2UuIAoKRm9sbG93aW5nIHRoaXMgbG9naWMsIHdlIHJlLWFuYWx5emVkIHRoZSBkYXRhIGZyb20gU3R1ZGllcyAxLTMgdG8gYXNzZXNzIGNoYW5nZXMgaW4gY29uY2VwdHVhbCBzdHJ1Y3R1cmUgY29udGludW91c2x5IGJldHdlZW4gNC05IHllYXJzIG9mIGFnZS4KCiMjIE1ldGhvZAoKIyMjIFBhcnRpY2lwYW50cwoKV2UgaW5jbHVkZWQgYWxsIG9mIHRoZSBjaGlsZCBwYXJ0aWNpcGFudHMgZnJvbSBTdHVkaWVzIDEtMyBpbiB0aGlzIGFuYWx5c2lzICh0b3RhbCBOPTU0NSBjaGlsZHJlbikuIFRoaXMgY29tYmluZWQgc2FtcGxlIG9mIGNoaWxkcmVuIHJhbmdlZCBpbiBhZ2UgZnJvbSA0LjAwLTkuOTkgeWVhcnMgKG1lZGlhbjogWFggeWVhcnMpOyBzZWUgTWV0aG9kcyBmb3IgU3R1ZGllcyAxLTMgZm9yIGZ1cnRoZXIgZGVtb2dyYXBoaWMgaW5mb3JtYXRpb24uCgojIyMgRGF0YSBwcmVwYXJhdGlvbgoKRm9sbG93aW5nIHRoZSBsb2dpYyBvdXRsaW5lZCBhYm92ZSwgd2UgZGVzaWduYXRlZCBhIHNldCBvZiBtZW50YWwgY2FwYWNpdHkgaXRlbXMgdG8gcmVwcmVzZW50IGNhdGVnb3JpZXMgb2YgYm9keSwgaGVhcnQsIGFuZCBtaW5kIGZvciBlYWNoIHN0dWR5IGFuZCB0YWxsaWVkIHVwIHRoZSBudW1iZXIgb2YgImVuZG9yc2VtZW50cyIgKHJlc3BvbnNlcyBvZiB5ZXMgb3Iga2luZGEpIHdpdGhpbiBlYWNoIGNhdGVnb3J5IGZvciBlYWNoIGNoaWxkIChzZXBhcmF0aW5nIG91dCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyB0byB0aGUgYmVldGxlIHZzLiB0aGUgcm9ib3QsIGZvciBTdHVkeSAzKS4gRm9yIHRoZSBzYWtlIG9mIGNvbXBhcmFiaWxpdHkgYWNyb3NzIHN0dWRpZXMgYW5kIGFjcm9zcyBjYXRlZ29yaWVzLCB3ZSBpbmNsdWRlZCBleGFjdGx5IHNpeCBtZW50YWwgY2FwYWNpdGllcyBpbiBlYWNoIGNhdGVnb3J5LgoKRm9yIFN0dWR5IDMsIHRoZXNlIGNhdGVnb3JpZXMgaGFkIGFscmVhZHkgYmVlbiBkZWZpbmVkIGluIHRoZSBpbml0aWFsIGRlc2lnbiBvZiB0aGUgc3R1ZHk6IFRvIHJlaXRlcmF0ZSwgdGhlIGJvZHkgY2F0ZWdvcnkgaW5jbHVkZWQgZmVlbCBodW5ncnksIGdldCB0aGlyc3R5LCBmZWVsIHNpY2ssIGZlZWwgdGlyZWQsIGdldCBzY2FyZWQsIGFuZCBzbWVsbCB0aGluZ3M7IHRoZSBoZWFydCBjYXRlZ29yeSBpbmNsdWRlZCBsb3ZlIHNvbWVvbmUsIGhhdGUgc29tZW9uZSwgZmVlbCBoYXBweSwgZ2V0IHNhZCwgZmVlbCBzb3JyeSwgZ2V0IGxvbmVseTsgYW5kIHRoZSBtaW5kIGNhdGVnb3J5IGluY2x1ZGVkIHNlZSwgaGVhciwgdGhpbmssIHJlbWVtYmVyIHRoaW5ncywga25vdyBzdHVmZiwgZmlndXJlIHRoaW5ncyBvdXQuCgpGb3IgU3R1ZGllcyAxLTIsIHdlIHVzZWQgYWR1bHRzJyBFRkEgcmVzdWx0cyBmcm9tIFN0dWR5IDEgdG8gZGVmaW5lIGNhdGVnb3JpZXMuCkZvciB0aGUgYm9keSBjYXRlZ29yeSwgd2UgaW5jbHVkZWQgZ2V0IGh1bmdyeSwgZmVlbCBwYWluLCBzbWVsbCB0aGluZ3MsIGZlZWwgc2NhcmVkLCBmZWVsIHNpY2ssIGFuZCBmZWVsIHRpcmVkLiBUaGVzZSBzaXggaXRlbXMgd2VyZSBhbW9uZyB0aGUgc2V2ZW4gc3Ryb25nZXN0IHBvc2l0aXZlIGZhY3RvciBsb2FkaW5ncyBvbiBGYWN0b3IgWFggYW1vbmcgYWR1bHRzIGluIFN0dWR5IDEgKGFsbCBsb2FkaW5ncyDiiaUwLjY2KSwgd2VyZSBpbmNsdWRlZCBpbiBib3RoIFN0dWRpZXMgMSBhbmQgMiwgYW5kIGhhZCBtYXhpbWFsIG92ZXJsYXAgd2l0aCB0aGUgYm9keSBjYXRlZ29yeSBhcyBkZWZpbmVkIGZvciBTdHVkeSAzIChmaXZlIG9mIHNpeCBpdGVtcyB3ZXJlIG5lYXJseSBpZGVudGljYWwsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBmZWVsIHBhaW4gaW5zdGVhZCBvZiBnZXQgdGhpcnN0eSkuIAoKRm9yIHRoZSBoZWFydCBjYXRlZ29yeSwgd2UgaW5jbHVkZWQgZmVlbCBsb3ZlLCBmZWVsIGhhcHB5LCBmZWVsIHNhZCwgZ2V0IGFuZ3J5LCBmZWVsIGd1aWx0eSwgYW5kIGdldCBodXJ0IGZlZWxpbmdzLiBUaGVzZSBzaXggaXRlbXMgd2VyZSBhbW9uZyB0aGUgdGVuIHN0cm9uZ2VzdCBwb3NpdGl2ZSBmYWN0b3IgbG9hZGluZ3Mgb24gRmFjdG9yIFhYIGFtb25nIGFkdWx0cyBpbiBTdHVkeSAxIChhbGwgZmFjdG9yIGxvYWRpbmdzIOKJpTAuNTEpLCB3ZXJlIGluY2x1ZGVkIGluIGJvdGggU3R1ZGllcyAxIGFuZCAyLCBhbmQgaGFkIG1heGltYWwgb3ZlcmxhcCB3aXRoIHRoZSBoZWFydCBjYXRlZ29yeSBhcyBkZWZpbmVkIGZvciBTdHVkeSAzICh0aHJlZSBvZiBzaXggaXRlbXMgd2VyZSBuZWFybHkgaWRlbnRpY2FsLCBhbmQgdGhlIG90aGVycyB3ZXJlIG1hdGNoZWQgaW4gdmFsZW5jZSBhbmQgZ2VuZXJhbCBtZWFuaW5nOiBnZXQgYW5ncnkgaW5zdGVhZCBvZiBoYXRlIHNvbWVvbmU7IGZlZWwgZ3VpbHR5IGluc3RlYWQgb2YgZmVlbCBzb3JyeTsgYW5kIGdldCBodXJ0IGZlZWxpbmdzIGluc3RlYWQgb2YgZ2V0IGxvbmVseSkuIAoKRmluYWxseSwgZm9yIHRoZSBtaW5kIGNhdGVnb3J5LCB3ZSBpbmNsdWRlZCBmaWd1cmUgb3V0IGhvdyB0byBkbyB0aGluZ3MsIHJlbWVtYmVyIHRoaW5ncywgYmUgYXdhcmUgb2YgdGhpbmdzLCBzZW5zZSB3aGV0aGVyIHNvbWV0aGluZyBpcyBjbG9zZSBieSBvciBmYXIgYXdheSwgc2Vuc2UgdGVtcGVyYXR1cmVzLCBhbmQgbWFrZSBjaG9pY2VzLiBUaGVzZSBzaXggaXRlbXMgd2VyZSBhbW9uZyB0aGUgdGVuIHN0cm9uZ2VzdCBwb3NpdGl2ZSBmYWN0b3IgbG9hZGluZ3Mgb24gRmFjdG9yIFhYIGFtb25nIGFkdWx0cyBpbiBTdHVkeSAxIChhbGwgZmFjdG9yIGxvYWRpbmdzIOKJpTAuNTApIGFuZCB3ZXJlIGluY2x1ZGVkIGluIGJvdGggU3R1ZGllcyAxIGFuZCAyLiBUaGV5IGFsc28gaGFkIHJlbGF0aXZlbHkgc3Ryb25nIG92ZXJsYXAgd2l0aCB0aGUgbWluZCBjYXRlZ29yeSBhcyBkZWZpbmVkIGZvciBTdHVkeSAzOiBUd28gb2Ygc2l4IGl0ZW1zIHdlcmUgbmVhcmx5IGlkZW50aWNhbCwgYW5kIHR3byBvdGhlcnMgd2VyZSBtYXRjaGVkIGluIGdlbmVyYWwgbWVhbmluZyAoYmUgYXdhcmUgb2YgdGhpbmdzIGluc3RlYWQgb2Ygc2VlOyBzZW5zZSB0ZW1wZXJhdHVyZXMgaW5zdGVhZCBvZiBoZWFyKTsgdGhlIG90aGVycyAoc2Vuc2Ugd2hldGhlciBzb21ldGhpbmcgaXMgY2xvc2UgYnkgb3IgZmFyIGF3YXkgYW5kIG1ha2UgY2hvaWNlcykgd2VyZSBub3QgcGFydGljdWxhcmx5IHdlbGwtbWF0Y2hlZCB0byB0aGUgU3R1ZHkgMyBzdWJzdGl0dXRlcyAoa25vdyBzdHVmZiBhbmQgdGhpbmspLCBidXQgYWxsb3dlZCB1cyB0byB1c2UgdGhlIHNhbWUgc2V0IG9mIGl0ZW1zIHRvIGRlZmluZSB0aGUgbWluZCBjYXRlZ29yeSBmb3IgU3R1ZGllcyAxIGFuZCAyLCB3aGljaCB3ZSBkZWNpZGVkIHdhcyBvdXIgcHJpb3JpdHkuIAoKV2Ugbm90ZSB0aGF0IHRoZXJlIGFyZSBtYW55ICJyZXNlYXJjaGVyIGRlZ3JlZXMgb2YgZnJlZWRvbSIgaW4gdGhlc2UgY2hvaWNlczsgd2UgaGF2ZSBzdHJpdmVuIHRvIGJlIGFzIHRyYW5zcGFyZW50IGFzIHBvc3NpYmxlIGFib3V0IG91ciBwcm9jZXNzLCBhbmQgZW5jb3VyYWdlIHRoZSBjdXJpb3VzIHJlYWRlciB0byBleHBsb3JlIG90aGVyIGNob2ljZXMgdXNpbmcgb3VyIGRhdGEgKG9wZW5seSBhdmFpbGFibGUgYXQgWFgpLgoKVGhpcyBsZWZ0IHVzIHdpdGggYSBkYXRhc2V0IGluIHdoaWNoIGVhY2ggY2hpbGQgd2FzIGFzc29jaWF0ZWQgd2l0aCAiZW5kb3JzZW1lbnQgdGFsbGllcyIgYmV0d2VlbiAwLTYgZm9yIGJvZHksIGZvciBoZWFydCwgYW5kIGZvciBtaW5kLCBmb3IgZWFjaCBvZiB0aGUgdGFyZ2V0IGNoYXJhY3RlcnMgdGhhdCBjaGlsZCBhc3Nlc3NlZCAoU3R1ZGllcyAxLTI6IG9uZSB0YXJnZXQgcGVyIGNoaWxkOyBTdHVkeSAzOiB0d28gdGFyZ2V0cyBwZXIgY2hpbGQpOyB0aGlzIGRhdGEgYWxzbyBpbmNsdWRlZCBlYWNoIGNoaWxkJ3MgZXhhY3QgYWdlLgoKIyMjIEFuYWx5c2lzIHBsYW4KCkZvbGxvd2luZyB0aGUgbG9naWMgZGVzY3JpYmVkIGFib3ZlLCB3ZSBjb21wYXJlZCBkaWZmZXJlbmNlcyBpbiBjaGlsZHJlbidzIGVuZG9yc2VtZW50IHRhbGxpZXMgYWNyb3NzIHBhaXJzIG9mIGNhdGVnb3JpZXM6IGJvZHkgbWludXMgaGVhcnQsIGJvZHkgbWludXMgbWluZCwgYW5kIGhlYXJ0IG1pbnVzIG1pbmQsIGludGVycHJldGluZyBsYXJnZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNhdGVnb3JpZXMgYXMgcmVmbGVjdGluZyBzdHJvbmcgZGlmZmVyZW50aWF0aW9uIG9mIHRob3NlIHR3byBjYXRlZ29yaWVzIGFuZCBhZ2UtcmVsYXRlZCBpbmNyZWFzZXMgaW4gZGlmZmVyZW5jZXMgdG8gcmVmbGVjdCBpbmNyZWFzaW5nIGRpZmZlcmVudGlhdGlvbiBvdmVyIGRldmVsb3BtZW50LiAKCltPUFRJT04gIzE6IFdlIGNvbmR1Y3RlZCB0aHJlZSBzZXBhcmF0ZSBtaXhlZC1lZmZlY3RzIEJheWVzaWFuIHJlZ3Jlc3Npb24gYW5hbHlzZXPigJRvbmUgZm9yIGVhY2ggcGFpciBvZiBjYXRlZ29yaWVz4oCUdG8gYW5hbHl6ZSB0aGVzZSBhZ2UtcmVsYXRlZCBjaGFuZ2VzIGluIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBkaWZmZXJlbmNlcyAodGhlb3JldGljYWwgcmFuZ2U6IDAtNikuIEZvciBlYWNoIGFuYWx5c2lzLCB3ZSByZWdyZXNzZWQgY2hpbGRyZW4ncyBleGFjdCBhZ2UgKGNlbnRlcmVkIGF0IHRoZSBtZWFuLCBYWCB5ZWFycykgb250byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gY2F0ZWdvcmllcyBpbiBxdWVzdGlvbiAoZS5nLiwgYm9keSBtaW51cyBoZWFydCksIHVzaW5nIFBvaXNzb24gZGlzdHJpYnV0aW9ucyBhbmQgbWF4aW1hbCByYW5kb20gZWZmZWN0cyBzdHJ1Y3R1cmVzLiBYWCBBTFNPIFJBVyBESUZGRVJFTkNFUz9dCgpbT1BUSU9OICMyOiBXZSBjb25kdWN0ZWQgYSBtaXhlZC1lZmZlY3RzIEJheWVzaWFuIHJlZ3Jlc3Npb24gYW5hbHlzaXMgdG8gYW5hbHl6ZSBkaWZmZXJlbmNlcyBpbiBlbmRvcnNlbWVudHMgYWNyb3NzIGNhdGVnb3JpZXMgYW5kIHdoZXRoZXIgdGhleSB2YXJpZWQgd2l0aCBjaGlsZHJlbidzIGFnZSwgdXNpbmcgY2hpbGRyZW4ncyBleGFjdCBhZ2UgKGNlbnRlcmVkIGF0IHRoZSBtZWFuLCBYWCB5ZWFycyksIHRoZSBjYXRlZ29yeSAoY29kZWQgd2l0aCBvcnRob2dvbmFsIGNvbnRyYXN0cyBjb21wYXJpbmcgYm9keSBhbmQgaGVhcnQgdG8gbWluZCwgYW5kIGJvZHkgdG8gaGVhcnQpLCBhbmQgYW4gaW50ZXJhY3Rpb24gYmV0d2VlbiBhZ2UgYW5kIGNhdGVnb3J5IHRvIHByZWRpY3QgdGhlIGVuZG9yc2VtZW50IHRhbGx5ICh0aGVvcmV0aWNhbCByYW5nZTogMC02KS4gV2UgdXNlZCBQb2lzc29uIGRpc3RyaWJ1dGlvbnMgdG8gbW9kZWwgdGhlc2UgdGFsbGllcywgYW5kIG1heGltYWwgcmFuZG9tIGVmZmVjdHMgc3RydWN0dXJlcy5dCgojIyBSZXN1bHRzCgpYWAoKIyMgRGlzY3Vzc2lvbgoKWFgKCiMgR2VuZXJhbCBEaXNjdXNzaW9uCgojIyBTdW1tYXJ5CgpUaGUgY3VycmVudCBzdHVkaWVzIHN1Z2dlc3QgdGhhdCBjaGlsZHJlbidzIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIHVuZGVyZ28gc3Vic3RhbnRpYWwgZGV2ZWxvcG1lbnQgYmV0d2VlbiB0aGUgYWdlcyBvZiA0LTkgeWVhcnPigJRpbiB0d28gZGlzdGluY3Qgc2Vuc2VzLiAKCkZpcnN0LCBhbmFseXNlcyBvZiB0aGUgY29ycmVsYXRpb25hbCBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4ncyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIChFRkFzKSBzdWdnZXN0ZWQgY2hhbmdlcyBpbiBjb25jZXB0dWFsIHN0cnVjdHVyZTogQmV0d2VlbiBlYXJseSBjaGlsZGhvb2QgKDQtNiB5ZWFyczsgU3R1ZGllcyAyLTMpIGFuZCBtaWRkbGUgY2hpbGRob29kICg3LTkgeWVhcnM7IFN0dWRpZXMgMS0yKSwgY2hpbGRyZW4ncyBzZW5zZSBvZiB3aGljaCBtZW50YWwgY2FwYWNpdGllcyAiZ28gdG9nZXRoZXIiIHNlZW1lZCB0byB1bmZvbGQgaW50byBhIGhpZ2hlci1kaW1lbnNpb25hbCBzcGFjZSwgY2hhcmFjdGVyaXplZCBieSBzdHJvbmdlciBkaWZmZXJlbnRpYXRpb24gb2YgdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYXQgd2UndmUgY2FsbGVkICJoZWFydCIgZnJvbSB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIG9mIHRoZSBib2R5IGFuZCB0aGUgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIG9mIHRoZSBtaW5kLiAKTWVhbndoaWxlLCBhbmFseXNlcyBvZiBmYWN0b3Igc2NvcmVz4oCUc3VtbWFyaWVzIG9mIHdoaWNoIG1lbnRhbCBjYXBhY2l0aWVzIGNoaWxkcmVuIHRlbmRlZCB0byBhdHRyaWJ1dGUgdG8gd2hpY2ggdGFyZ2V0IGNoYXJhY3RlcnPigJRyZXZlYWxlZCBhIHNlY29uZCBraW5kIG9mIGFnZS1yZWxhdGVkIGRpZmZlcmVuY2U6IHdoYXQgd2UgbWlnaHQgY2FsbCBjaGFuZ2VzIGluIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgY29uY2VwdC4gVGhlc2UgZGlmZmVyZW5jZXMgd2VyZSBjbGVhcmVzdCBpbiBTdHVkaWVzIDEgYW5kIDMsIHdoaWNoIGZvY3VzZWQgb24gdHdvICJlZGdlIGNhc2VzIiBpbiBzb2NpYWwgcmVhc29uaW5nIChiZWV0bGVzIGFuZCByb2JvdHMpOiBCZXR3ZWVuIHRoZSBhZ2VzIG9mIDQtNiB5ZWFycyAoU3R1ZHkgMyksIFhYIEZJTEwgSU4sIHdoaWxlIGJldHdlZW4gdGhlIGFnZXMgb2YgNy05IHllYXJzIChTdHVkeSAxKSwgYXR0cmlidXRpb25zIG9mIGJvZHkgdG8gYmVldGxlcyBhbmQgcm9ib3RzIHdlcmUgcmVsYXRpdmVseSBzdGFibGUgYW5kIGFkdWx0LWxpa2UsIGF0dHJpYnV0aW9ucyBvZiBoZWFydCB0byB0aGVzZSAiZWRnZSBjYXNlcyIgc3RhcnRlZCBvdXQgaGlnaGVyIHRoYW4gYWR1bHRzIGFuZCBkZWNyZWFzZWQgdG8gbmVhcmx5IGFkdWx0LWxpa2UgbGV2ZWxzIGJ5IHRoZSBhZ2Ugb2YgOSB5ZWFycywgYW5kIGF0dHJpYnV0aW9ucyBvZiBtaW5kIHN0YXJ0ZWQgb3V0IGxvd2VyIHRoYW4gYWR1bHRzIGFuZCBpbmNyZWFzZWQgdG8gbmVhcmx5IGFkdWx0LWxpa2UgbGV2ZWxzIGJ5IHRoZSBhZ2Ugb2YgOSB5ZWFycy4KClhYIEdECg==